Регистрация конвейера MediatR с ответом void / Task
Моя команда:
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
.
В документах упоминается Unit
struct . Как мне его использовать?
2 ответа:
Как указал Микаэль Дерри, 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>>();