【发布时间】: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 _requestsRouter (MediatR Request#1),它注册了 GetUserAccount 处理程序,如下所示:
VS 调试控制台中的可疑消息:“抛出异常:Microsoft.Extensions.DependencyInjection.dll 中的 'System.ObjectDisposedException' 和 System.Private.CoreLib.dll 中的“System.ObjectDisposedException””
无法调试,无法到达处理程序。 如何解决问题?
嵌套 MediatR 请求、通知是否有任何限制?
【问题讨论】:
-
由于您发布的细节很少,因此很难确定您的问题。你确定你注入了所有必需的依赖项吗?
-
@Ben 我只有一个依赖来发送 MediatR 请求和通知,它是 IMediator _requestsRouter(构造函数注入)。正如您从屏幕截图中看到的那样,它已创建并已注册 GetUserAccount。
-
@Ben 实际上看起来 DI 容器无法实例化 MediatR 处理程序,当我从控制器或其他请求发送时它没有问题,我该如何调试这种情况?