我正在尝试为泛型请求注册一个泛型请求处理程序,但是当我调用
await _mediator.Send(new ExchangeOrderRequest<ExchangeOrderResponseSuccessEvent>());MediatR.IRequestHandler2[MyNamespace.ExchangeOrderRequest1MyNamespace.ExchangeOrderResponseSuccessEvent,System.InvalidOperationException:未为
MediatR.Unit类型的请求找到处理程序。向容器注册处理程序。有关示例,请参阅GitHub中的示例。
顺便指出,对于咯咯笑,我能够将IRequestHandler<ExchangeOrderRequest<ExchangeOrderResponseSuccessEvent>>的一个实例插入到控制器中。
// Some assembly scanning, doesn't find my handler
services.AddMediatR(typeof(Startup), typeof(ExchangeOrderRequest), typeof(IDocumentMessage), typeof(OrderExecution.Handler));
// Try to manually add the handler. Still doesn't find it
services.AddTransient<IRequestHandler<ExchangeOrderRequest<ExchangeOrderResponseSuccessEvent>>, ExchargeOrderRequestHandler<ExchangeOrderResponseSuccessEvent, ExchangeOrderRequest<ExchangeOrderResponseSuccessEvent>>>();
public class ExchargeOrderRequestHandler<TEvent, TRequest> : IRequestHandler<TRequest>
where TRequest : ExchangeOrderRequest<TEvent>
where TEvent : ExchangeOrderEvent
{
// Stuff
}`
public class ExchangeOrderRequest<T>: DocumentMessage, IRequest where T: ExchangeOrderEvent
{
// Stuff
}
public class ExchangeOrderEvent : IEvent
{
// Stuff
}我在这里错过了什么?
发布于 2021-05-10 00:05:45
我也有同样的问题。
但是,我可以像这样注册处理程序。
services.AddTransient(typeof(IRequestHandler<,>), typeof(CustomHandler<,>));这只适用于一个通用处理程序..。我有很多..。我需要这样做:
services.AddTransient(typeof(IRequestHandler<,>), typeof(CustomHandler1<,>));
services.AddTransient(typeof(IRequestHandler<,>), typeof(CustomHandler2<,>));
//etc...当我尝试这么做的时候..。无论我发送给MediatR的是什么命令,它都会解析我注册的最后一个处理程序。因此,类型约束自然会被中转,并出现运行时异常。
https://stackoverflow.com/questions/63491394
复制相似问题