interface IHandleMessages 具有逆变参数TMessage
IHandleMessages<in TMessage>
这使得在Ioc容器IHandleMessages<DerivedType>
中注册成为可能,并在Handler:IHandleMessages<BaseType>
中实现。那没关系。
问题在于Failed<TMessage>
包装器中的失败消息,其中TMessage不是逆变的。这是不可能的
Handler的实现,如Handler : IHandleMessages<Failed<Base>>
并在Ioc容器中注册.As<IHandleMessages<Failed<DerivedType>>>()
我认为Failed<in TMessage>
而不是Failed<TMessage>
您怎么看?
答案 0 :(得分:0)
当我在Rebus中实现二级重试机制时,我没有考虑这种情况,但我想支持它。
我已将该功能添加到0.99.36(如果测试通过,其他一切看起来都不错,将在几天后在NuGet上添加)。
它看起来与你提出的建议略有不同,因为只有接口才能使用共同方差和反方差。
因此,Rebus现在会发送一个IFailed<out TMessage>
,因为这样您就可以实施,例如当失败的消息为IHandleMessages<IFailed<AbstractBaseClass>>
时,DerivedFromAbstractBaseClass
。
关注NuGet.org - 它会在几天后出现:)
与此同时,您可以看到代码的内容in the accompanying test。