使用IMediator .Net Core 2注入通用命令处理程序时出错

问题描述 投票:0回答:1

我正在使用带有.Net Core 2.2的IMediator,我有一个我要在服务集合中注入的通用命令:

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.IRequestHandler2[GetByIdCommand1 [MyModel],MyModel]的请求的处理程序。在容器中注册处理程序。有关示例,请参阅GitHub中的示例。

我不知道为什么我会收到这个错误。有任何想法吗?

generics asp.net-core dependency-injection mediator
1个回答
0
投票

对于services.AddMediatR(typeof(GetByIdCommandHandler<,>).GetTypeInfo().Assembly);,它无法帮助您注册创建的GetByIdCommandHandler,您需要自己注册。

请在Startup.cs中尝试以下代码

services.AddScoped(typeof(IRequestHandler<,>), typeof(GetByIdCommandHandler<,>));
services.AddMediatR();
© www.soinside.com 2019 - 2024. All rights reserved.