【发布时间】:2015-11-11 19:07:22
【问题描述】:
我有一个任务需要在后台的单独线程中运行,我正在使用 SignalR 报告进度。这在前段时间有效,并且我对代码进行了一些修改,但是对于现在收到的错误,我完全不知所措:
“从请求实例的范围中看不到带有与“AutofacWebRequest”匹配的标记的范围。这通常表示注册为 per-HTTP 请求的组件正在由 SingleInstance() 组件(或类似的场景。)在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身请求依赖项。”
非常感谢任何帮助!
public ActionResult DoAction(IEnumerable<string> items){
//...
Func<CancellationToken, Task> taskFunc = CancellationToken => performAction(items);
HostingEnvironment.QueueBackgroundWorkItem(taskFunc);
//...
}
private async Task performAction(IEnumerable<string> items){
var svc = AutofacDependencyResolver.Current.AppicationContainer.BeginLifetimeScope().Resolve<MyService>();
svc.Method(items);
}
public class MyService{
private EntityContext db;
public MyService(EntityContext db){
this.db = db;
}
}
在我的 Startup.Container.cs 文件中:
builder.RegisterType<MyService>().As<MyService>().InstancePerLifetimeScope();
builder.RegisterType<EntityContext>().InstancePerRequest();
【问题讨论】: