我已经为我们的项目设置了 Unity 的依赖注入。该项目本身是一个同时使用 MVC 和 Web API 的 ASP.NET 应用程序。
对于数据库上下文,我正在使用PerRequestLifetimeManager
。这样做是为了使业务逻辑的不同部分使用相同的上下文(从而使用相同的事务)。
为了能够使用PerRequestLifetimeManager
,我添加了对 nuget 包的引用ASP.NET MVC 的 Unity 引导程序 and ASP.NET Web API 的 Unity 引导程序.
为了在 Web API 中使用此生命周期管理器,以下行已添加到启动代码中:
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
Unity 容器针对 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));
在构建 Unity 容器时,数据库上下文设置为按以下方式解析每个请求:
container.RegisterType<IDataContext>(new PerRequestLifetimeManager(),
new InjectionFactory(c =>
{
// Some code
return new DataContext(/* params */);
}
));
然而,这段代码似乎并没有给我一个新的DataContext
对于每个请求。它在单个请求中的不同位置为我提供了相同的上下文(这很好)。但是,后续(Web api)请求将被给予相同的实例DataContext
我希望为每个新请求创建一个新请求。我也期待DataContext
请求完成后正确处理(该类实现IDisposable
).
这里发生了什么?我是否缺少一些配置才能使其正常工作?或者这不应该按照我期望的方式工作吗?