我爲我們的項目設置了用於依賴項注入的Unity。該項目本身是一個同時使用MVC和Web API的ASP.NET應用程序。Unity PerRequestLifetimeManager在不同請求中重複使用對象
對於數據庫上下文,我使用的是PerRequestLifetimeManager
。這樣做是爲了使業務邏輯的不同位使用相同的上下文(並因此是相同的事務)。
爲了能夠使用到的NuGet包PerRequestLifetimeManager
,我已經添加引用團結引導程序的ASP.NET MVC和團結引導程序進行的ASP.NET Web API。
爲配合使用的Web API這一輩子經理,以下行已添加到啓動代碼:
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
的統一容器設置兩個MVC和Web API:
var container = BuildUnityContainer();
GlobalConfiguration.Configuration.DependencyResolver = new Microsoft.Practices.Unity.WebApi.UnityDependencyResolver(container);
System.Web.Mvc.DependencyResolver.SetResolver(new Microsoft.Practices.Unity.Mvc.UnityDependencyResolver(container));
在建設團結容器,將數據庫上下文設置爲可通過以下方式每個請求解析:
container.RegisterType<IDataContext>(new PerRequestLifetimeManager(),
new InjectionFactory(c =>
{
// Some code
return new DataContext(/* params */);
}
));
但是,這個代碼似乎沒有爲每個請求提供新的DataContext
。它在單個請求中給予我不同地方的相同上下文(這很好)。然而,隨後的(web api)請求會被賦予相同的DataContext
實例,我期望爲每個新請求創建一個新實例。我也希望DataContext
在請求完成後(類實現IDisposable
)被正確處置。
這是怎麼回事?我是否缺少一些配置以使其正常工作?或者這不應該像我期望的那樣工作?
它可能會緩存InjectionFactory調用。你可以嘗試沒有它?我想象的問題是你想要有不同的參數。 – 2014-11-21 16:12:37