【问题标题】:MediatR request handler is not called from another location未从其他位置调用 MediatR 请求处理程序
【发布时间】:2019-12-04 16:33:59
【问题描述】:

当我从控制器调用 MediatR Send() 时,会调用处理程序。

    private readonly IMediator _requestsRouter;

    public async Task<DTO.UserAccount> GetUserAccount()
    {
        var req = new GetUserAccount(x, y, z, y);     
        var response = await _requestsRouter.Send(req);
        return response;
    }

从另一个 MediatR 请求调用相同的 MediatR 请求也可以:

Controller -> MediatR_Request _1 -> GetUserAccount request handler

除了最后一步之外,这也适用:

Controller -> MediatR_Request_0 -> MediatR Notification -> MediatR Request _1(the same as before) -> does not arrive to GetUserAccount Handler.

我在之前的步骤中检查了 IMediator _requestsRou​​ter (MediatR Request#1),它注册了 GetUserAccount 处理程序,如下所示:

VS 调试控制台中的可疑消息:“抛出异常:Microsoft.Extensions.DependencyInjection.dll 中的 'System.ObjectDisposedException'System.Private.CoreLib.dll 中的“System.ObjectDisposedException””

无法调试,无法到达处理程序。 如何解决问题?

嵌套 MediatR 请求、通知是否有任何限制?

【问题讨论】:

  • 由于您发布的细节很少,因此很难确定您的问题。你确定你注入了所有必需的依赖项吗?
  • @Ben 我只有一个依赖来发送 MediatR 请求和通知,它是 IMediator _requestsRou​​ter(构造函数注入)。正如您从屏幕截图中看到的那样,它已创建并已注册 GetUserAccount。
  • @Ben 实际上看起来 DI 容器无法实例化 MediatR 处理程序,当我从控制器或其他请求发送时它没有问题,我该如何调试这种情况?

标签: c# .net-core mediatr


【解决方案1】:

我在第一个 MediatR .Publish() 调用中错过了 await。据我了解,没有 await 导致 ObjectDisposedException 现在消失了。

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多