Регистрация конвейера 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>>();