Если предположить, что у меня есть два контроллера, которые используют один и тот же интерфейс в своих конструкторах, как:Dependency Injection, ASP.NET MVC, Ninject: Привязка некоторых реализаций для некоторых контроллеров
public class XController: Controller{
private IOperation operation;
public XController (IOperation operation){
this.operation = operation;
}
public ActionResult Index(){
ViewBag.Test = operation.Test();
return View();
}
}
public class YController: Controller{
private IOperation operation;
public YController (IOperation operation){
this.operation = operation;
}
public ActionResult Index(){
ViewBag.Test = operation.Test();
return View();
}
}
И
public interface IOperation {
String Test();
}
public class Implementation1: IOperation{
String Test(){retrun "Implementation 1";}
}
public class Implementation2: IOperation{
String Test(){retrun "Implementation 2";}
}
При использовании Ninject я могу сделать , и это изменяет поведение для моих X и Y контроллеров. Тем не менее, мне иногда может потребоваться привязать мой X-контроллер к Implementtaion1, оставив мой контроллер Y еще привязанным к реализации 2. Возможно ли это вообще без необходимости полностью отделять реализацию 1 от реализации 2, определяя новый интерфейс?
Что происходит с контроллерами при смене реализаций? Являются ли эти контроллеры зависимыми от фактической реализации? Если это так, вы нарушаете [Принцип замены Лискова] (https://en.wikipedia.org/wiki/Liskov_substitution_principle). Если это так, каждая реализация должна иметь свой собственный уникальный интерфейс. – Steven