我有一个使用Unity作为GlobalConfiguration.Configuration.DependencyResolver
的Web API项目。该项目使用工作单元模式和单个数据访问层,该数据访问层在每个请求的整个生命周期内保持在内存中。在每个请求事件结束时,我想使用自己独特的数据访问层执行事件,以便它们可以并行运行(共享会导致并发问题)。
如何在Http请求上下文中创建子生存期范围?
我可以访问UnityDependencyResolver
的静态实例,该实例的方法为IDependencyScope BeginScope()
,但是如果它实现了System.Web.Http.Dependencies.IDependencyResolver
,那么它似乎使用的是不正确的选项吗?
使用其他DI框架,例如Autofac,它将是:
using(var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IService>();
using(var nestedScope = scope.BeginLifetimeScope())
{
var anotherService = nestedScope.Resolve<IOther>();
}
}
我更愿意将事件移动到其他进程并通过消息队列触发,但此时无法进行。
答案 0 :(得分:1)
Unity容器可以create child container:
using(var scope = container.CreateChildContainer())
{
var service = scope.Resolve<IService>();
using(var nestedScope = scope.CreateChildContainer())
{
var anotherService = nestedScope.Resolve<IOther>();
}
}
将其与different lifetime managers(例如HierarchicalLifetimeManager)相结合,您可以获得结果。