我的命令:
public class Command : IRequest { ... }
我的经纪人:
public class CommandHandler : IAsyncRequestHandler<Command> { ... }
我的管道注册(不使用开放式泛型):
services.AddTransient<IPipelineBehavior<Command>, MyBehavior<Command>>();
但是这不起作用:Using the generic type 'IPipelineBehavior<TRequest, TResponse>' requires 2 type arguments.
和MyBehavior
的错误相同。
The docs提到Unit
struct。我该如何使用它?
答案 0 :(得分:6)
正如MickaëlDerriey指出的那样,MediatR已经定义IRequest,IRequestHandler和IAsyncRequestHandler,如果不需要则不会返回值。
如果查看IRequest,您可以看到它实际上是从IRequest<Unit>
继承的,这意味着当您处理Command
时,您的管道行为MyBehavior
将返回{{ 1}}结构作为默认响应,无需为Unit
指定显式响应。
举个例子:
Command
答案 1 :(得分:1)
我想我已经弄明白了,到目前为止似乎有效。
public class Command : IRequest<Unit> { ... }
public class CommandHandler : IAsyncRequestHandler<Command, Unit> { ... }
services.AddTransient<IPipelineBehavior<Command,Unit>, MyBehavior<Command,Unit>>();