gpt4 book ai didi

c# - 使用 Autofac 的异步 ASP.NET Web API 方法中的 ObjectDisposedException

转载 作者:行者123 更新时间:2023-11-30 20:38:39 25 4
gpt4 key购买 nike

在异步 ASP.NET Web API 方法中通过 Autofac 注入(inject)的对象的惰性实例化过程中,我收到 ObjectDisposedException(无法解析实例并且无法从此 LifetimeScope 创建嵌套生命周期,因为它已被处置)。

这是 Web API 方法:

Lazy<PrintHubSender> _printHubSender;

public async void Print(Guid orderId)
{
var order = await _orderNoSqlDbRepository.GetSingleAsync(o => o.Id == orderId);
_printHubSender.Value.PrintOrder(order); // This triggers the exception
}

Lazy 实例是通过 Web API Controller 构造函数注入(inject)的。 Autofac注册如下:

Type hubSender = ...
containerBuilder.RegisterType(hubSender)
.AsSelf()
.PropertiesAutowired()
.InstancePerRequest();

如果 ASP.NET Web API 方法不是异步的,则不会发生异常。

最佳答案

Web API 引擎不知道方法是否为 async或者不是因为async是一个编译时概念。

引擎知道的是一个方法是否返回 Task是否衍生值(value)。

除了事件处理程序或方法调用的完成并不重要的任何其他 API 之外,async相当于voidTask作为 async相当于TTask<T> .

试试这个:

public async Task Print(Guid orderId)
{
...
}

关于c# - 使用 Autofac 的异步 ASP.NET Web API 方法中的 ObjectDisposedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964297/

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