使用void / Task响应注册MediatR管道

时间:2017-02-22 07:52:52

标签: c# asp.net-core cqrs mediatr

我的命令:

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。我该如何使用它?

2 个答案:

答案 0 :(得分:6)

正如MickaëlDerriey指出的那样,MediatR已经定义IRequestIRequestHandlerIAsyncRequestHandler,如果不需要则不会返回值。

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