【发布时间】:2012-02-16 00:09:43
【问题描述】:
我一直在阅读 Mark Seemann 的书 Dependency Injection in .NET 以及他关于 DI Composition Roots 的博客文章。
我正在重构我的 ASP.MVC 3 应用程序容器调用,从我的控制器中调用到组合根中。
过去我会像这样在控制器中解析类型。
[HttpGet]
public ActionResult Create()
{
// Don't do this...
var color = MvcApplication.Container.Resolve<IColor>();
return View(color);
}
阅读 Mark 的书后,我意识到这不太理想,因此我设置了我的 MVC 应用程序,以便在应用程序启动时使用从 IControllerFactory 派生的类将存储库注入控制器,如 Mark 的书中第 7.2.1 节所述。
如果我不应该使用Service Locator 模式直接从我的 ASP.MVC 3 控制器调用 IoC 容器,我应该如何以及在哪里实例化新类型?每个控制器都是不同的,所以我想要一种解决新类型的通用方法。
我可以像这样直接实例化类型,但这会破坏目的。
[HttpGet]
public ActionResult Create()
{
// Don't do this...
var color = new Color();
return View(color);
}
我是否应该将通用工厂与通用存储库一起注入我的控制器并将其用于新的创建类型?有没有更好的办法?
编辑
我意识到这与另一个 SO question 相似,但我的实体具有需要在将它们传递到视图之前解决的依赖关系。
【问题讨论】:
-
@Mark Seemann 上周末刚找到你的书,爱不释手——干得好!我会按照你的建议在抽象工厂工作。
标签: .net asp.net-mvc-3 dependency-injection inversion-of-control