相关疑难解决方法(0)

在ASP.NET中的后台任务中解决Autofac组件

将ASP.NET中的Autofac与ContainerDisposalModule一起使用,我如何才能支持具有需要解决的组件依赖性的调用并忘记调用?我遇到的问题是ASP.NET请求在任务运行之前完成并处理了请求的生存期范围,因此任何需要在新线程中解析的组件都会失败,并显示消息“实例无法解析”并且无法从此LifetimeScope创建嵌套的生存期,因为它已经被处理掉了”。在ASP.NET中使用Autofac支持发火和忘记通话的最佳方法是什么?我不想延迟执行可以在后台线程上完成的某些任务的请求。

asp.net autofac fire-and-forget

4
推荐指数
2
解决办法
3954
查看次数

Autofac无法使用后台任务

我有一项任务需要在后台的单独线程中运行,并且我正在使用SignalR报告进度。这在前一段时间奏效,并且我进行了一些代码修改,但是对于现在收到的错误我完全不知所措:

“从实例被请求的范围中看不到带有匹配'AutofacWebRequest'的标签的范围。这通常表明SingleInstance()组件正在请求注册为HTTP请求的组件(或类似情况)。在网络集成下,始终从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;
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的Startup.Container.cs文件中:

builder.RegisterType<MyService>().As<MyService>().InstancePerLifetimeScope();
   builder.RegisterType<EntityContext>().InstancePerRequest();
Run Code Online (Sandbox Code Playgroud)

c# autofac

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

标签 统计

autofac ×2

asp.net ×1

c# ×1

fire-and-forget ×1