2016-02-29 58 views
1

接口IHandleMessages具有逆变参数TMessage IHandleMessages<in TMessage>SimpleRetryStrategy失败<TMessage>

这使得可能在IOC容器IHandleMessages<DerivedType>注册和在处理程序实现:IHandleMessages<BaseType>。那没问题。

问题在于Failed<TMessage>包装失败的消息,其中TMessage不是逆变。这使得不可能有 执行处理程序像Handler : IHandleMessages<Failed<Base>>

和登记在IOC容器.As<IHandleMessages<Failed<DerivedType>>>()

我认为其合理有Failed<in TMessage>但不Failed<TMessage>

你觉得呢?

回答

0

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

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

它看起来与你所提出的略有不同,因为只有接口才能产生同向和反向差异。

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

继续NuGet.org的眼睛 - 这将是出在几天之内:)

在此期间,你可以看到代码的样子in the accompanying test