У меня есть задача, которая должна выполняться в отдельном потоке в фоновом режиме, и я использую SignalR для отчета о прогрессе. Это сработало некоторое время назад, и я сделал некоторые модификации кода, но я полностью потерял ошибку, которую я получаю сейчас:Autofac не работает с фоновые задачи
«Никакая область с тегом, соответствующая« AutofacWebRequest », видна из области, в которой экземпляр был запрошен. Как правило, это указывает, что компонент, зарегистрированный в качестве HTTP-запроса, запрашивается компонентом SingleInstance() (или подобным сценарием). В рамках веб-интеграции всегда запрашиваются зависимости от 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();
Читал [Вопросы и ответы по работе с каждым запросом пожизненного объемом] (http://autofac.readthedocs.org/en/latest/faq/per-request-scope.html)? –