gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:32:50 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com