接口IHandleMessages具有反向参数TMessage IHandleMessages<in TMessage>
这使得在Ioc容器IHandleMessages<DerivedType>中注册并在Handler:IHandleMessages<BaseType>中实现成为可能。这没什么。
这个问题存在于失败消息的Failed<TMessage>包装器中,其中TMessage不是反变体。这使得不可能有像Handler : IHandleMessages<Failed<Base>>这样的Handler实现。
并在Ioc容器.As<IHandleMessages<Failed<DerivedType>>>()中注册
我认为拥有Failed<in TMessage>而不是Failed<TMessage>是合理的
你认为如何?
发布于 2016-02-29 21:50:53
当我在Rebus中实现第二级重试机制时,我没有考虑这个场景,但我想支持它。
我已经将这个特性添加到0.99.36 (如果测试通过,其他一切看起来都很好的话,它将在几天后出现在NuGet上)。
但是,它看起来与您建议的略有不同,因为协方差和反向方差只能通过接口进行。
因此,Rebus现在分发一个IFailed<out TMessage>,因为当失败的消息是DerivedFromAbstractBaseClass时,您可以实现例如IHandleMessages<IFailed<AbstractBaseClass>>。
留意一下NuGet.org -几天后它就会出来:)
同时,您可以看到代码是什么样子的在伴随的测试中。
https://stackoverflow.com/questions/35700930
复制相似问题