Unity Lifetime Managers & EF Data Context --> Best Practice
所有的,
关于Unity Lifetime Managers有很多帖子,但我还没有找到一个人说"在这些情况下,你应该始终使用X"的一个好的经验法则。让我描述一下我的应用程序,我有一个ASP.NET MVC 4 Web应用程序。我有一个包含3个项目的Visual Studio解决方案,我的"核心"项目包含我所有的EF资料、一个测试项目和MVC Web项目。我正在使用Unity进行依赖项注入,现在有以下代码:
1 2 3 4 5
| // Context
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
new ContainerControlledLifetimeManager();
container.RegisterType<UnitOfWork>(
new ContainerControlledLifetimeManager()); |
但是,我注意到,我的上下文并不是用我认为我想要的每一个新的Web请求重新创建的(如果我在这个假设中出错,请告诉我)。我很难分析下面列出的站点的所有信息,并且已经阅读了很多人创建自己的类perhttpRequestLifeTimeManager来处理这个问题。
这里的最佳实践是什么?
了解Microsoft开发人员网络的终身管理器-http://msdn.microsoft.com/en-us/library/ff660872(v=pandp.20).aspx
MVC DI&Unity与Lifetime Manager通过codeproject-http://www.codeproject.com/articles/424743/mvc-di-Unity-with-Lifetime-Manager
ASP.NET MVC提示:通过Shiju Varghese的博客使用Unity应用程序块进行依赖项注入-http://weblogs.asp.net/Shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx
MVC,EF-Unity中每个Web请求的DataContext单实例,通过堆栈溢出-MVC,EF-Unity中每个Web请求的DataContext单实例
通过堆栈溢出在具有Unity的多个类型中插入相同的DataContext实例-在具有Unity的多个类型中插入相同的DataContext实例
- 相关:stackoverflow.com/questions/10585478/&hellip;。
是的,每个请求通常需要一个dbContext。
在每个请求上创建的perhttpRequestLifeTimeManager或子容器是处理此问题的典型方法。
Unity的最新版本引入了用于ASP.NET MVC的Unity引导程序,它有一个新的内置生存期管理器:PerRequestLifetimeManager。
您可以使用Unity第3章,带Unity的依赖注入,在开发人员的依赖注入指南中阅读更多内容。
- 嘿,兰迪!有点老的答案,但我的问题确实与此有关。我使用PerRequestLifetimeManager在Unity中注册上下文:container.RegisterType(new PerRequestLifetimeManager(), new InjectionConstructor());,但dbContext从未按请求进行处理。我在RegisterTypes方法中也包含了这一行:DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));但是当我这样做时,dbContext在请求结束之前被处理掉。有什么想法吗?