我有一个使用Unity作为DI框架的ASP.NET MVC5项目。
请考虑以下代码:
container.RegisterType<ApplicationDbContext>(
new InjectionFactory(c => new ApplicationDbContext()));
由于我的存储库使用相同的DbContext,将相同的实例传递给所有这些实例是切实可行的。但是,该站点的每个访问者都应该有一个单独的上下文实例,而不是在一个大的&#34;站点范围内工作&#34;实例。我想这会减少仅为当前请求设置实例生命周期的可能性。
由于UnityConfig.RegisterComponents()
在Application_Start()
方法中,我猜它只会为整个应用程序创建一个实例。
在这种情况下,最佳做法是什么?我考虑过以下几点:
UnityConfig.RegisterComponents()
移至Application_BeginRequest()
我试图在微软的网站上搜索InjectionFactory,运气不大(http://msdn.microsoft.com/en-us/library/microsoft.practices.unity.injectionfactory%28v=pandp.51%29.aspx)
在这种情况下,我应该遵循什么最佳做法?我不想过度设计它,最简单的工作方案是什么?
答案 0 :(得分:1)
我不是网络开发人员,但通过阅读依赖注入Unity一书,他们确实提到了一个可用于单个HTTP请求的特殊生命周期管理器 - PerRequestLifetimeManager
也许这可以满足您的需求?
答案 1 :(得分:1)
删除工厂并替换为:
container.RegisterType<ApplicationDbContext>(new HierarchicalLifetimeManager());
这将导致每个请求都有一个ApplicationDbContext实例,并且还会在请求结束时调用处理上下文。
答案 2 :(得分:-2)