当有人调用 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)