c# – 使用void / Task响应注册MediatR管道
作者:互联网
我的命令:
public class Command : IRequest { ... }
我的经纪人:
public class CommandHandler : IAsyncRequestHandler<Command> { ... }
我的管道注册(不使用开放式泛型):
services.AddTransient<IPipelineBehavior<Command>, MyBehavior<Command>>();
但是这不起作用:使用泛型类型’IPipelineBehavior< TRequest,TResponse>‘需要2个类型参数.和MyBehavior一样的错误.
The docs提到Unit
struct.我该如何使用它?
解决方法:
正如MickaëlDerriey指出的那样,MediatR已经将IRequest,IRequestHandler和IAsyncRequestHandler定义为如果不需要则不返回值.
如果查看IRequest,您可以看到它实际上继承自IRequest< Unit>,这意味着当您处理Command时,您的管道行为MyBehavior将默认返回Unit结构作为响应,而无需为您的Command指定显式响应.
举个例子:
public class Command : IRequest { ... }
public class CommandHandler : IAsyncRequestHandler<Command> { ... }
services.AddTransient<IPipelineBehavior<Command,Unit>, MyBehavior<Command,Unit>>();
标签:c,asp-net-core,cqrs,mediatr 来源: https://codeday.me/bug/20190608/1197694.html