ObjectDisposedException in async ASP.NET Web API method with

本文关键字:API method with Web NET in async ASP ObjectDisposedException | 更新日期: 2023-09-27 18:31:37

我在异步 ASP.NET Web API 方法中通过 Autofac 注入的对象延迟实例化期间收到一个 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
}

惰性实例通过 Web API 控制器构造函数注入。Autofac 注册如下:

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

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

ObjectDisposedException in async ASP.NET Web API method with

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

引擎知道的是方法是否返回Task派生值。

除了事件处理程序或任何其他 API 之外,方法调用的完成并不重要,Task voidasync等效值,因为Tasync等效值Task<T>

试试这个:

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