我想使用dryioc来管理多个线程所需的依赖关系。我想启动线程传递每个需要ioc解析依赖关系的作业。不确定这应该是什么样的理想任何援助赞赏。
答案 0 :(得分:1)
如果您需要服务作用于线程的服务(每个线程一个实例),则为容器设置ThreadScopeContext
:
RootContainer = new Container(scopeContext: new ThreadScopeContext());
RootContainer.Register<IService, MyService>(Reuse.InCurrentScope);
// in your thread
using (RootContainer.OpenScope())
{
var service = RootContainer.Resolve<IService>();
// use the service
}
如果您需要服务以在新线程中启动,但随后通过async/await
调用(可能在不同的线程上)传播相同的实例,请使用AsyncExecutionFlowScopeContext
。
DryIoc中的范围上下文是第三方对象,独立于容器,您可以在其中存储开放范围,例如在线程静态,或AsyncLocal
变量。
另一种方法(默认行为)是将开放范围与新范围容器相关联,但是您需要引用此新容器才能解决。这里我没有使用任何范围上下文,但需要从scopedContainer
而不是根目录1解决:
RootContainer = new Container(); // without ambient scope context
RootContainer.Register<IService, MyService>(Reuse.InCurrentScope);
// in your thread
using (var scopedContainer = RootContainer.OpenScope())
{
var service = scopedContainer.Resolve<IService>();
// use the service
}