Dryioc和多线程

时间:2017-05-15 12:28:19

标签: c# multithreading dryioc

我想使用dryioc来管理多个线程所需的依赖关系。我想启动线程传递每个需要ioc解析依赖关系的作业。不确定这应该是什么样的理想任何援助赞赏。

1 个答案:

答案 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
}