注册具有无效/任务响应的MediatR管道

gro*_*kky 6 c# cqrs mediatr asp.net-core

我的命令:

public class Command : IRequest { ... }
Run Code Online (Sandbox Code Playgroud)

我的处理程序:

public class CommandHandler : IAsyncRequestHandler<Command> { ... }
Run Code Online (Sandbox Code Playgroud)

我的管道注册(不使用开放的泛型):

services.AddTransient<IPipelineBehavior<Command>, MyBehavior<Command>>();
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:Using the generic type 'IPipelineBehavior<TRequest, TResponse>' requires 2 type arguments.并且存在相同的错误MyBehavior

文档提到了Unitstruct。如何使用?

bme*_*ith 6

正如MickaëlDerriey指出的那样,MediatR已经定义了IRequestIRequestHandlerIAsyncRequestHandler,以在不需要时不返回值。

如果您查看IRequest,则可以看到它实际上是从继承的IRequest<Unit>,这意味着当您进行处理时Command,默认情况下,管道行为MyBehaviorUnit结构返回为响应,而无需为IRequest指定显式响应Command

举个例子:

public class Command : IRequest { ... }
public class CommandHandler : IAsyncRequestHandler<Command> { ... }

services.AddTransient<IPipelineBehavior<Command,Unit>, MyBehavior<Command,Unit>>();
Run Code Online (Sandbox Code Playgroud)