所有
有很多关于Unity Lifetime Managers的帖子,但我还没有发现有人说“在这些情况下你应该总是使用X”这是一个很好的经验法则。让我描述一下我的应用程序,我有一个ASP.NET MVC 4 Web应用程序。我有一个包含3个项目的Visual Studio解决方案,我的'Core'项目,包含我所有的EF内容,测试项目和MVC Web项目。我使用Unity进行依赖注入,现在有以下代码:
// Context
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
new ContainerControlledLifetimeManager();
container.RegisterType<UnitOfWork>(
new ContainerControlledLifetimeManager());
但是,我注意到我的上下文没有重新创建每个新的Web请求,这是我认为我想要的(如果我在这个假设中错了,请告诉我)。我很难分析下面列出的网站中的所有信息,并且已经阅读了很多人创建自己的名为PerHttpRequestLifetimeManager的类来处理这个问题。
这里最好的做法是什么?
答案 0 :(得分:9)
是的,您通常需要每个请求一个DbContext。
每个请求创建的PerHttpRequestLifetimeManager或子容器是处理它的典型方法。
Unity的最新版本引入了Unity bootstrapper for ASP.NET MVC,其中包含一个新的内置生命周期管理器:PerRequestLifetimeManager
。
您可以在Developer's Guide to Dependency Injection Using Unity第3章Dependency Injection with Unity中阅读更多内容。