关于实体框架:Unity Lifetime Managers&

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实例

  • 是的,每个请求通常需要一个dbContext。

    在每个请求上创建的perhttpRequestLifeTimeManager或子容器是处理此问题的典型方法。

    Unity的最新版本引入了用于ASP.NET MVC的Unity引导程序,它有一个新的内置生存期管理器:PerRequestLifetimeManager

    您可以使用Unity第3章,带Unity的依赖注入,在开发人员的依赖注入指南中阅读更多内容。