繁体   English   中英

具有Autofac的异步ASP.NET Web API方法中的ObjectDisposedException

[英]ObjectDisposedException in async ASP.NET Web API method with Autofac

在通过异步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方法不是异步的,则不会发生异常。

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

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

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

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM