我在Rebus 3.1.2中使用MSMQ传输和StructureMap 4.4.2容器进行多态消息调度时遇到了一个奇怪的问题。
如果我有消息:
public class SomeMessage
和一些处理程序:
public class Handler1 : IHandleMessages<SomeMessage>
public class Handler2 : IHandleMessages<SomeMessage>
当我发送SomeMessage时,两个处理程序都按预期启动。
然而,当我收到消息时:
public class SomeMessage : ISomeInterface
和一些处理程序:
public class Handler1 : IHandleMessages<SomeMessage>
public class Handler2 : IHandleMessages<ISomeInterface>
当我发送SomeMessage时,只有Handler1触发。但是如果我注释掉Handler1并再次发送消息,Handler2将会触发。
如果从SomeBaseClass和Handler2继承的SomeMessage处理SomeBaseClass(甚至是对象),情况也是如此。只有Handler1才会开火。但如果我注释掉Handler1,Handler2就会开火。
如果找到特定邮件类的任何处理程序,它几乎不会尝试进行多态分派。
因为Handler2会在我注释掉Handler1时触发,所以我不认为这是一个容器问题。我猜测这是否真的坏了,其他人会注意到。所以我假设它是我,但我不知道从哪里开始。
AFAIK,没有什么可以配置多态分派,对吧?
知道我可能做错了吗?