2017-02-22 18 views
2

Моя команда:Зарегистрировать трубопровод 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. Как его использовать?

ответ

3

Как Микаэль Derriey отметил, 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>>(); 
1

Я думаю, что я понял это, и, похоже, он работает до сих пор.

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

services.AddTransient<IPipelineBehavior<Command,Unit>, MyBehavior<Command,Unit>>(); 
+1

MediatR определяет специфику [ 'IRequest'] (https://github.com/jbogard/MediatR/blob/master/src/MediatR/IRequest.cs#L6) , ['IRequestHandler'] (https://github.com/jbogard/MediatR/blob/master/src/MediatR/IRequestHandler.cs#L23) и [' IAsyncRequestHandler'] (https://github.com/jbogard/ MediatR/blob/master/src/MediatR/IAsyncRequestHandler.cs # L25) для случаев, когда вы не хотите возвращать значение. Такое же поведение, как указание «Unit» в качестве типа возврата, семантика ближе к тому, что вы пытаетесь достичь, поскольку вам не нужно возвращать экземпляр «Unit» в обработчике. –

 Смежные вопросы

  • Нет связанных вопросов^_^