MediatR 在预期为单个时获取多个处理程序实例

MediatR gets multiple handlers instances when expected single

我正在使用通用类型请求和处理程序。
如果我有多个 IAsyncRequestHandler,DryIoc 正在解析多个实例,而不是单个实例,从而导致 MediatR 抛出异常。
我该如何解决这个问题?

请在 Net Fiddle here.
上检查此行为(请注意,在此示例中,通用类型仅用于证明这一点 - MediatR 抛出异常 - 在我的生产代码中,实际上需要泛型类型)

DryIoc 2.10.1 已解决您的问题。

原因详情有问题#446

更新:

关于带有 class GoodMorningRequestHandler<T> : IAsyncRequestHandler<GoodMorningRequest, string> 的样本,异常有点误导,但它如预期的那样存在。

原因是上面的映射根本没有被DryIoc注册RegisterMany。发生这种情况是因为 RegisterMany 检查服务类型 (IAsyncRequestHandler<GoodMorningRequest, string>) 应该为实现 GoodMorningRequestHandler<T> 提供 open-generic 参数 T,显然它不能那样做。因此这种服务类型被过滤掉了。

之后,剩余的实现将是 HelloRequestHandler<T>,与已解决的 IAsyncRequestHandler<GoodMorningRequest, string> 不匹配,因此例外。

要自己确认,请尝试直接注册:

container.Register(typeof(IAsyncRequestHandler<GoodMorningRequest, string>), typeof(GoodMorningRequestHandler<>))。它会抛出异常。相比之下 RegisterMany 设计得更宽容,因此它会跳过这对。