1

我正在使用通用类型请求和处理程序。
如果我有多个 IAsyncRequestHandler DryIoc 正在解析多个实例,而不是单个实例,则会导致 MediatR 引发异常。
我怎么解决这个问题?请在此处

的 Net Fiddle 检查此行为。(注意,在这个例子中Generic Type只是用来证明这一点——MediatR抛出异常——在我的生产代码中,Generic Types实际上是需要的)

4

1 回答 1

2

DryIoc 2.10.1已解决您的问题。

原因详情在 issue #446中。

更新:

关于class GoodMorningRequestHandler<T> : IAsyncRequestHandler<GoodMorningRequest, string>除此之外的样本有点误导,但正如预期的那样。

原因是 DryIoc 根本没有注册上述映射RegisterMany。发生这种情况是因为RegisterMany检查服务类型 ( ) 是否应为 implementationIAsyncRequestHandler<GoodMorningRequest, string>提供开放通​​用参数,显然它不能这样做。因此,此服务类型被过滤掉。TGoodMorningRequestHandler<T>

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

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

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

于 2017-02-18T11:04:18.900 回答