我想将依赖项注入到 ASP.NET MVC 模型中,但我不知道在管道中的哪个位置进行注入。
使用 ControllerFactory 非常简单,但在处理模型时却没有那么简单。
我想将依赖项注入到 ASP.NET MVC 模型中,但我不知道在管道中的哪个位置进行注入。
使用 ControllerFactory 非常简单,但在处理模型时却没有那么简单。
您可以在 Shiju Vargheses 博客上找到合理的 How-To:ASP.NET MVC 提示:使用 Unity 应用程序块进行依赖注入
通常我像这样在控制器中注入依赖项
PersonController(IPersonRepository r)
{
\\ constrtuctor code
}
在模型中,当需要某些继承接口的实例时,您可能会执行以下操作:
var r = container.Resolve<IPersonRepository>();
您是否完全确定需要将依赖项注入您的域模型本身?实体或业务对象通常会封装状态并公开方法以根据业务规则修改该状态。不属于此类别的代码通常会在服务中找到。你读过域服务的概念吗?也许使用一个会更好地满足您的需求,并且您不需要将任何依赖项注入您的域本身。
我最终创建了一个服务定位器:http ://martinfowler.com/articles/injection.html#UsingAServiceLocator
我发现它比处理 IoC 容器并尝试在 MVC 管道中插入我的 DI 代码更容易。
我建议查看 S#arp 架构 http://www.sharparchitecture.net/
用于 asp.net mvc 的开源框架插件。
查看我根据 Ayende 在其博客上的解释创建的示例。基本上,我使用 Castle 作为 IoC 容器,并使用 Mvc Contrib 将所有控制器添加到容器中,并让 Mvc 从中获取它们。然后我可以将任何东西注入到容器中,例如 NHibernate ISession。
如果你想在你的模型类(实体)中注入东西,NH 现在支持Hibernate-managed objects 的依赖注入。有关 Spring 和 Windsor 的具体示例,请参见this、this和this。
您所谈论的更多的是 Active Record 模式。
AR 是否可行取决于您使用的 ORM/DAO。
AR 模式通常更适合小型项目。