小编Dan*_*mps的帖子

Autofac 为新线程创建子作用域未按预期工作“无法解析实例并且无法创建嵌套的生命周期...”

当有人调用 URL“/index/5”时,我想返回一个视图,同时我想启动一个新线程,在该线程中我想通过一些数据库调用和业务逻辑来确定是否应该向其他人发送通知。这是我的设置的简化表示,它给出了错误。

如何让我的子作用域在并行线程中工作?

应用启动

var builder = new ContainerBuilder();
builder.RegisterType<MyRepository>().As<IMyRepository();
builder.RegisterType<Entities>().As<Entities>().InstancePerRequest();
var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)

控制器

    private readonly IMyRepository _myRepository ;

    public MyController(
        IMyRepository myRepository
       )
    {
        _myRepository = myRepository;
    }

    public async Task<ActionResult> Index(int id)
    {
        _myRepository.DoSomething(id);

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

存储库:

private ILifetimeScope _lifeTimeScopeChild = null;

public void DoSomething(int id){
            //start new thread with child scope
            using(var threadLifeTime = AutofacDependencyResolver.Current.ApplicationContainer.BeginLifetimeScope())
            {
                _lifeTimeScopeChild = threadLifeTime;
                 Thread t = new Thread(new ParameterizedThreadStart(MySeparateThread));
                 t.Start(id);  
            }
        }

        private void MySeparateThread(object id) {
                    var …
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection autofac

2
推荐指数
1
解决办法
1104
查看次数

标签 统计

.net ×1

autofac ×1

c# ×1

dependency-injection ×1