编程语言
首页 > 编程语言> > c# – 使用void / Task响应注册MediatR管道

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,IRequestHandlerIAsyncRequestHandler定义为如果不需要则不返回值.

如果查看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