我正在使用通用类型请求和处理程序。
如果我有多个 IAsyncRequestHandler DryIoc 正在解析多个实例,而不是单个实例,则会导致 MediatR 引发异常。
我怎么解决这个问题?请在此处
的 Net Fiddle 检查此行为。(注意,在这个例子中Generic Type只是用来证明这一点——MediatR抛出异常——在我的生产代码中,Generic Types实际上是需要的)
1 回答
DryIoc 2.10.1已解决您的问题。
原因详情在 issue #446中。
更新:
关于class GoodMorningRequestHandler<T> : IAsyncRequestHandler<GoodMorningRequest, string>
除此之外的样本有点误导,但正如预期的那样。
原因是 DryIoc 根本没有注册上述映射RegisterMany
。发生这种情况是因为RegisterMany
检查服务类型 ( ) 是否应为 implementationIAsyncRequestHandler<GoodMorningRequest, string>
提供开放通用参数,显然它不能这样做。因此,此服务类型被过滤掉。T
GoodMorningRequestHandler<T>
之后,剩余的实现将HelloRequestHandler<T>
与已解决的不匹配IAsyncRequestHandler<GoodMorningRequest, string>
,因此出现异常。
要自己确认,请尝试明确注册:
container.Register(typeof(IAsyncRequestHandler<GoodMorningRequest, string>), typeof(GoodMorningRequestHandler<>))
. 它会抛出异常。相比之下RegisterMany
设计得更宽容,因此它只会跳过这对。