c# - 在 autofac 中注册为 .InstancePerRequest() 的依赖项是否始终在异步延续中可用?

标签 c# autofac

在 Autofac 配置中:我已将依赖项注册为 .InstancePerRequest() 并让我的部分代码使用 async 关键字或 .continueWith()。我的问题是:如果在异步执行的延续中使用依赖项,那么依赖项是否只会在异步代码执行后才被释放,或者它可能发生在之前?

具体场景:

     // in IocConfig.cs
     ContainerBuilder.Register(c => Context.CreateFromToken(                                                                     
       c.Resolve<IUser>().Name,                                                                                                                      
      .As<Context>()
      .InstancePerRequest();

然后在一个文件中我有这段代码:

    // elsewhere in the code for a specific request..
    client.PostAsync(new Uri(_context.GetSetting("SomeEndpoint")),requestContent)
    .ContinueWith(task =>
        {
            ErrorLog.Write(_context.CreateErrorEntry($"Request: sent {task.Result.StatusCode} result: {task.Result.ToJson()}", LogLevel.Debug));
        });

此处的_context(即.InstancePerRequest())在.ContinueWith()中是否仍然可用,还是可以处置?

最佳答案

如果相同的 HttpContext(在 MVC 中)或入站 RequestMessage(在 Web API 中)在延续中可用,则每个请求项将在那里。请求生命周期范围存储在相应的位置。

如果它不可用(例如,如果您的等待者没有传播完整的执行上下文),那么请求生命周期范围可能会被您处理掉,并且它将不可用。

关于c# - 在 autofac 中注册为 .InstancePerRequest() 的依赖项是否始终在异步延续中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715523/

相关文章:

c# - 异步EF 6.0比同步花费的时间更长

dependency-injection - 正确使用依赖注入(inject)

c# - Autofac 和通用类型工厂,如 CaSTLe Windsor

c# - 无法将解析的对象转换为通用抽象 autofac C#

c# - AutoFac - 为一些开放的通用注册装饰器

inversion-of-control - 如何使用 autofac 进行自定义初始化

c# - Visual Studio 2017 RC - C# UWP 项目 - 无法创建类

c# - 自定义 Nullable<T> 扩展方法和 SelectMany

c# - 事件触发的速度有多快?

c# - 如何将 RSA 公钥从 .NET 导入 OpenSSL