System.ObjectDisposeException:“无法解析实例,并且无法从此 LifetimeScope 创建嵌套生命周期

Ath*_*hul 5 c# autofac cqrs asp.net-web-api mediatr

我有一个异步控制器,我试图从中调用两个不同的异步函数。像这样

   public async void Approvefiles(string[] data)
    {

       var response = await _mediator.Send(new persons.Query(data));
       await _mediator.Send(new employees.Query(data));

    }
Run Code Online (Sandbox Code Playgroud)

对我来说一切看起来都不错,但这会引发错误

System.ObjectDisposedException: 'Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.'
Run Code Online (Sandbox Code Playgroud)

谁能指出我在这里做错了什么?如果我只调用一个异步函数(例如,仅用于 person.Query),则不会发生此错误。

Kaz*_*zar 6

你的问题在这里:

 public async void Approvefiles(string[] data)
Run Code Online (Sandbox Code Playgroud)

async void方法几乎意味着没有任何东西会等待该方法完成后再继续(以及导致许多其他问题)。

所以我想你的请求范围在你的第二次调用之前就被清理了_mediator.Send,这意味着什么都无法解决。

您需要将签名更改为:

public async Task Approvefiles(string[] data)
Run Code Online (Sandbox Code Playgroud)

然后根据需要在控制器中等待该方法,以确保它在请求结束之前完成。

这里有一个关于为什么 async void 不好的答案,了解更多细节。