Я пытаюсь реализовать слабосвязанное приложение в приложении asp.net MVC5. У меня есть контроллер:
public class HeaderController : Controller
{
private IMenuService _menuService;
public HeaderController(IMenuService menuService)
{
this._menuService = menuService;
}
//
// GET: /Header/
public ActionResult Index()
{
return View();
}
public ActionResult GetMenu()
{
MenuItem menu = this._menuService.GetMenu();
return View("Menu", menu);
}
}
И сервис, используемый в этом контроллере:
public class MenuService : IMenuService
{
private IMenuRespository _menuRepository;
public MenuService(IMenuRespository menuRepository)
{
this._menuRepository = menuRepository;
}
public MenuItem GetMenu()
{
return this._menuRepository.GetMenu();
}
}
И репозиторий, который используется в классе службы:
public class MenuRepository : IMenuRespository
{
public MenuItem GetMenu()
{
//return the menu items
}
}
Интерфейсы, используемые для службы и репозитория, таковы:
public interface IMenuService
{
MenuItem GetMenu();
}
public interface IMenuRespository
{
MenuItem GetMenu();
}
Конструктор для HeaderController
принимает в MenuService
с помощью Injection конструктора, и у меня есть ninject в качестве контейнера DI, обрабатывающего это.
Все работает отлично - кроме того, в моем контроллере я все еще могу сделать это:
MenuItem menu = new MenuService(new MenuRepository());
... который разрушает архитектуру. Как я могу предотвратить использование "нового" таким образом?