【发布时间】:2017-04-07 02:35:19
【问题描述】:
我有一个 Windows 服务,它为每个注册的 IService 启动多个任务以同时运行。每个 IService 使用几个管理器,每个管理器都使用一个依赖项。我希望在一个服务中的所有管理器中使用一个单一的依赖项(即每个服务都有一个由其管理器共享的依赖项)。我已经向 HeirarchialLifeTimeManager 注册了依赖项。如何创建或注册每个 IService 以使其获得自己的单例依赖项?
var _container = new UnityContainer();
_container.RegisterType<Dependency>(new HierarchicalLifetimeManager());
_container.RegisterType<MgrA1>();
_container.RegisterType<MgrA2>();
_container.RegisterType<MgrB1>();
_container.RegisterType<MgrB2>();
_container.RegisterType<IService, SvcA>("A");
_container.RegisterType<IService, SvcB>("B");
var services = _container.Resolve<IService[]>()
foreach(var svc in services)
{
Task.Factory.StartNew(() => svc.Start());
}
// dependencies (via constructors)
SvcA(MgrA1, MgrA2)
SvcB(MgrB1, MgrB2)
MgrA1(Dependency)
MgrA2(Dependency)
MgrB1(Dependency)
MgrB2(Dependency)
我想获得 2 个 Dependency 实例,一个用于 SvcA 及其管理器,一个用于 SvcB 及其管理器。我尝试使用 .CreateChildContainer() 在其自己的子容器中注册每个服务,但是当在父容器上调用以获取所有服务并启动它们时,它们无法解析。
【问题讨论】:
标签: dependency-injection unity-container