我正在使用带有.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.IRequestHandler
2[GetByIdCommand
1 [MyModel],MyModel]的请求的处理程序。在容器中注册处理程序。有关示例,请参阅GitHub中的示例。
我不知道为什么我会收到这个错误。有任何想法吗?
对于services.AddMediatR(typeof(GetByIdCommandHandler<,>).GetTypeInfo().Assembly);
,它无法帮助您注册创建的GetByIdCommandHandler
,您需要自己注册。
请在Startup.cs
中尝试以下代码
services.AddScoped(typeof(IRequestHandler<,>), typeof(GetByIdCommandHandler<,>));
services.AddMediatR();