Unity 生命周期管理器和 EF 数据上下文 --> 最佳实践

13

大家好,

关于Unity Lifetime Managers的问题,有许多文章。但我还没有找到有人给出一个“在这些情况下您应该始终使用X”的好建议。让我描述一下我的应用程序:我有一个ASP.NET MVC 4 Web应用程序。我有一个包含3个项目的Visual Studio解决方案,其中包括我的“核心”项目(其中包含所有的EF内容),一个测试项目和MVC Web项目。我正在使用Unity进行依赖注入,现在的代码如下:

// Context
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
    new ContainerControlledLifetimeManager();
container.RegisterType<UnitOfWork>(
    new ContainerControlledLifetimeManager());

然而,我注意到我的上下文没有在每个新的Web请求中重新创建,这是我认为我想要的(如果我这种做法是错误的,请告诉我)。我很难分析下面列出的网站中的所有信息,并阅读了许多人创建自己的名为PerHttpRequestLifetimeManager的类来处理这个问题。

那么,这里真正的最佳实践是什么呢?

  1. 通过Microsoft的开发者网络理解Lifetime Managers - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. 使用CodeProject进行MVC DI和Unity with Lifetime Manager - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. 通过Shiju Varghese的博客学习ASP.NET MVC Tip: 使用Unity Application Block进行依赖注入 - http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx
  4. 在Unity中通过Stack Overflow使用MVC,EF - DataContext 单例实例Per-Web-Request - MVC, EF - DataContext singleton instance Per-Web-Request in Unity
  5. 通过Stack Overflow在多个类型之间注入相同的DataContext实例 - Inject same DataContext instance across several types with Unity

相关:https://dev59.com/pGkv5IYBdhLWcg3wdQhT. - Steven
1个回答

10

2
嘿,Randy!这个回答有点老了,但我的问题确实与此相关。我正在使用PerRequestLifetimeManager在Unity中注册我的上下文:container.RegisterType<DbContext, EntitiesContext>(new PerRequestLifetimeManager(), new InjectionConstructor()); - 但是DbContext从未按照每个请求的基础进行处理。我还在RegisterTypes方法中包含了这一行:DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));但是当我这样做时,在请求结束之前,DbContext被处理掉了。有什么想法吗? - Felipe Correa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接