Ошибка при введении универсального обработчика команд с помощью IMediator .Net Core 2 - PullRequest
0 голосов
/ 23 апреля 2019

Я использую IMediator с .Net Core 2.2, и у меня есть общая команда, которую я хочу добавить в коллекцию сервисов:

public class GetByIdCommand<T> : IRequest<T>
{
     public GetByIdCommand(int id)
     {    
         this.Id = id;
     }

     public int Id { get; set; }
}

, а вот обработчик:

public class GetByIdCommandHandler<TFrom, TTo> : IRequestHandler<GetByIdCommand<TTo>, TTo>
{
    public GetByIdCommandHandler()
    {
        // Repository<TFrom>
    }

    public async Task<TTo> Handle(GetByIdCommand<TTo> request, CancellationToken cancellationToken)
    {
        // Get Model
    }
}

И инъекция выглядит так:

services.AddMediatR(typeof(GetByIdCommandHandler<,>).GetTypeInfo().Assembly);

Когда я вызываю команду:

var model = await this.Mediator.Send(new GetByIdCommand<DbModel, MyModel>(1)).AnyContext();

Но я получаю эту ошибку:

InvalidOperationException: Обработчик не найден для запроса типа MediatR.IRequestHandler 2[GetByIdCommand 1 [MyModel], MyModel].Зарегистрируйте ваши обработчики в контейнере.Смотрите примеры в GitHub.

Я не знаю, почему я получаю эту ошибку.Есть идеи?

1 Ответ

0 голосов
/ 24 апреля 2019

Для services.AddMediatR(typeof(GetByIdCommandHandler<,>).GetTypeInfo().Assembly);, это не поможет вам зарегистрировать созданное GetByIdCommandHandler, вам нужно зарегистрировать его самостоятельно.

Попробуйте код ниже в Startup.cs

services.AddScoped(typeof(IRequestHandler<,>), typeof(GetByIdCommandHandler<,>));
services.AddMediatR();
...