Я читал книгу Марка Симанна Внедрение зависимостей в .NET и его сообщение в блоге относительно DI Composition Roots .
И я нахожусь в процессе рефакторинга вызовов моего контейнера приложения ASP.MVC 3 из моих контроллеров в корень композиции.
Раньше я разрешал типы внутри моего контроллеракак это.
[HttpGet]
public ActionResult Create()
{
// Don't do this...
var color = MvcApplication.Container.Resolve<IColor>();
return View(color);
}
После прочтения книги Марка я понимаю, что это менее чем идеально, поэтому я настроил свое MVC-приложение для внедрения репозитория в контроллер при запуске приложения, используя класс, производный от IControllerFactory, как описано в книге Марка.в разделе 7.2.1.
Если я не должен вызывать контейнер IoC напрямую из моего контроллера ASP.MVC 3, используя шаблон Service Locator , как и где создавать новые типы?Каждый контроллер индивидуален, поэтому я хочу общий способ разрешения новых типов.
Я мог бы создавать экземпляры типов, например, так, как это, но в некотором роде победило бы цель.
[HttpGet]
public ActionResult Create()
{
// Don't do this...
var color = new Color();
return View(color);
}
Должен ли я делать инъекцииобщая фабрика в мой контроллер вместе с общим хранилищем и использовать ее для создания новых типов?Есть ли лучший способ?
РЕДАКТИРОВАТЬ
Я понимаю, что это похоже на другой ТАК вопрос , но мои сущности имеют зависимости, которые необходимо решитьперед передачей их на просмотр.