有很多关于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的类来处理这个问题.
这里最好的做法是什么?
>通过微软开发者网络了解终身经理 – http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
> MVC DI&通过CodeProject与Lifetime Manager统一 – 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中的DataContext单例实例Per-Web-Request – MVC,EF – DataContext singleton instance Per-Web-Request in Unity
>通过Stack Overflow-Inject same DataContext instance across several types with Unity在Unity中注入多个类型的相同DataContext实例
解决方法
在每个请求上创建的PerHttpRequestLifetimeManager或子容器是处理它的典型方法.
最新版本的Unity引入了Unity bootstrapper for ASP.NET MVC,它有一个新的内置生命周期管理器:PerRequestLifetimeManager.
您可以在Developer’s Guide to Dependency Injection Using Unity第3章Dependency Injection with Unity中阅读更多内容.