12

全部,

有很多关于 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. 微软开发者网络了解终身管理者 - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. 通过 CodeProject 使用 MVC DI 和 Unity 与 Lifetime Manager - 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 - 通过堆栈溢出在 Unity 中的 DataContext 单例实例 Per-Web-Request - MVC,EF - Unity 中的 DataContext 单例实例 Per-Web-Request
  5. 通过 Stack Overflow 使用 Unity 跨多种类型注入相同的 DataContext 实例 - 使用 Unity 跨多种类型注入相同的 DataContext 实例
4

1 回答 1

10

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

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

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

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

于 2013-08-16T01:49:16.020 回答