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

时间:2017-08-16 13:55:02

标签: 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()中使用,还是可以处置?

1 个答案:

答案 0 :(得分:1)

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

如果它不可用(例如,如果你的awaiter没有传播完整的执行上下文),那么请求生命周期范围可能会从你的下方处理掉,并且它将无法使用。