SimpleRetryStrategy失败<tmessage>

时间:2016-02-29 13:34:42

标签: servicebus rebus

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>

是合理的

您怎么看?

1 个答案:

答案 0 :(得分:0)

当我在Rebus中实现二级重试机制时,我没有考虑这种情况,但我想支持它。

我已将该功能添加到0.99.36(如果测试通过,其他一切看起来都不错,将在几天后在NuGet上添加)。

它看起来与你提出的建议略有不同,因为只有接口才能使用共同方差和反方差。

因此,Rebus现在会发送一个IFailed<out TMessage>,因为这样您就可以实施,例如当失败的消息为IHandleMessages<IFailed<AbstractBaseClass>>时,DerivedFromAbstractBaseClass

关注NuGet.org - 它会在几天后出现:)

与此同时,您可以看到代码的内容in the accompanying test