[英]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之外, void
的async
等效项是Task
,而T
的async
等效项是Task<T>
。
尝试这个:
public async Task Print(Guid orderId)
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.