Я хочу связать несколько конкретных классов с интерфейсом в Ninject - PullRequest
1 голос
/ 10 января 2012

Я хочу связать несколько конкретных классов с интерфейсом в Ninject.

У меня есть ITestService интерфейс и конкретные реализации TestServiceA и TestServiceB .

Они связаны следующим образом:

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

В " HomeController (служба ITestService) ", у меня есть это:

private ITestService _service;  

public HomeController(ITestService service) 
{   
     _service = service 
}

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

Это вызывает ошибку.Как я могу это исправить?

1 Ответ

4 голосов
/ 10 января 2012

Это не сработает.Вы связываете две вещи с одним и тем же интерфейсом, и у Ninject нет возможности узнать, какой конкретный класс реализовать. Ninject предлагает контекстную привязку , хотя.

Пример:

// 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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...