【问题标题】:Unity Lifetime Managers & EF Data Context --> Best PracticeUnity Lifetime Managers & EF Data Context --> 最佳实践
【发布时间】:2013-08-17 16:00:18
【问题描述】:

全部,

已经有很多关于 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 开发人员网络了解终身经理 - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. MVC DI 和 Unity 与 Lifetime Manager 通过 CodeProject - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. 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
  4. MVC、EF - 通过 Stack Overflow 在 Unity 中的 DataContext 单例实例 Per-Web-Request - MVC, EF - DataContext singleton instance Per-Web-Request in Unity
  5. 通过 Stack Overflow 使用 Unity 跨多种类型注入相同的 DataContext 实例 - Inject same DataContext instance across several types with Unity

【问题讨论】:

标签: entity-framework asp.net-mvc-4 dependency-injection unity-container httprequest


【解决方案1】:

是的,您通常需要每个请求一个 DbContext。

在每个请求上创建的 PerHttpRequestLifetimeManager 或子容器是典型的处理方式。

Unity 的最新版本引入了 Unity bootstrapper for ASP.NET MVC,它具有一个新的内置生命周期管理器:PerRequestLifetimeManager

您可以在Developer's Guide to Dependency Injection Using Unity第3章Dependency Injection with Unity阅读更多内容。

【讨论】:

  • 嘿兰迪!有点旧的答案,但我的问题确实与此有关。我正在使用PerRequestLifetimeManager 在 Unity 中注册我的上下文:container.RegisterType&lt;DbContext, EntitiesContext&gt;(new PerRequestLifetimeManager(), new InjectionConstructor()); - 但 DbContext 永远不会在每个请求的基础上进行处理。我还在RegisterTypes 方法中包含了这一行:DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));,但是当我这样做时,DbContext 在请求结束之前被释放。有什么想法吗?
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2014-08-30
相关资源
最近更新 更多