在异步 ASP.NET Web API 方法中通过 Autofac 注入(inject)的对象的延迟实例化过程中,我收到 ObjectDisposeException(无法解析实例,并且无法从此 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
是否有派生值。
除了事件处理程序或任何其他 API(其中方法调用的完成并不重要)之外,async
相当于 void
是 Task
作为async
相当于 T
是 Task<T>
.
试试这个:
public async Task Print(Guid orderId)
{
...
}
关于c# - 使用 Autofac 的异步 ASP.NET Web API 方法中的 ObjectDisposeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964297/