2 回答
TA贡献1946条经验 获得超4个赞
您发送给 MediatR 的命令类型为IdentifiedCommand<CreateMessageCommand, bool>
。因此 MediatR 将寻找类型为 的处理程序IRequestHandler<IdentifiedCommand<CreateMessageCommand, bool>, bool>>
。
DI 容器通常会首先寻找完全匹配的对象,然后考虑开放的泛型类型注册。在这种情况下,它将查找IRequestHandler<,>
注册,并为其插入类型参数IdentifiedCommand<CreateMessageCommand, bool>
、 和bool
。但是,您的命令处理程序没有实现IRequestHandler<T, R>
,而是实现了IRequestHandler<IdentifiedCommand<T, R>, R>
不适合于此的。因此 DI 容器没有找到处理程序并且会引发该错误。
为了使其工作,您必须以 DI 容器查找它的方式实现该类型。所以你将不得不实施IRequestHandler<T, R>
。
不幸的是,这也意味着您无法使用类型安全的方式IdentifiedCommand<T, R>
在处理程序中接受。相反,您只会收到一个T
您必须处理的请求。
TA贡献1804条经验 获得超3个赞
添加这个解决了我的问题。
builder.RegisterType(typeof(IdentifiedCommandHandler<CreateMessageCommand, bool>))
.As<IRequestHandler<IdentifiedCommand<CreateMessageCommand, bool>, bool>>()
.AsImplementedInterfaces();
- 2 回答
- 0 关注
- 398 浏览
添加回答
举报