2012-01-10 6 views
1

Ninjectのインタフェースに複数の具象クラスをバインドしたいとします。Ninjectのインタフェースに複数の具象クラスをバインドしたい

私はITestServiceインターフェースと具体的な実装TestServiceATestServiceBを持っています。彼らは次のようにバインドされている

: "にHomeController(ITestServiceサービス)" では

kernel.Bind<ITestService>().To<TestServiceA>(); 
kernel.Bind<ITestService>().To<TestServiceB>(); 

、私はこれを持っている:

private ITestService _service; 

public HomeController(ITestService service) 
{ 
    _service = service 
} 

public ActionResult Index() 
{ 
    ViewBag.Message = _service.GetMessage(); 
    return View(); 
} 

それがエラーを発生させます。どうすれば修正できますか?

+1

エラー/例外メッセージとは何ですか? – nemesv

答えて

4

これは動作しません。あなたは同じインターフェースに2つのことをバインドし、Ninjectはどの具体的なクラスを具体化するかを知る方法がありません。 Ninject offers contextual bindingです。

例:

// Setup your bindings with a name: 
Bind<ITestService>().To<TestServiceA>().Named("A"); 
Bind<ITestService>().To<TestServiceB>().Named("B"); 


// Then in your controller, specify the name with an attribute: 
public HomeController([Named("A")]ITestService service) 
{ 
    _service = service 
} 
関連する問題