2012-01-10 6 views
1

Я хочу связать несколько конкретных классов с интерфейсом в Ninject.Я хочу связать несколько конкретных классов с интерфейсом в 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

Что такое сообщение об ошибке/исключение? – nemesv

ответ

4

Это не сработает. Вы связали две вещи с одним интерфейсом, и 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 
} 
Смежные вопросы