NServiceBus:事件、多重继承、每个事件多次调用处理程序

NServiceBus:事件、多重继承、每个事件多次调用处理程序,nservicebus,Nservicebus,我很抱歉,每个事件都会多次调用处理程序,这似乎与通过接口继承构建的事件相关,这存在一些神秘的问题 我们只为消息使用接口,并使用NServiceBus.MessageInterfaces.MessageMapper.Reflection.MessageMapper().CreateInstance()创建要放到总线上的实例 我们的界面: IOperationOccured-包含基本操作信息,此事件的订阅者以相当通用的方式进行操作。此事件从未直接引发 ISpecificOperationOccure

我很抱歉,每个事件都会多次调用处理程序,这似乎与通过接口继承构建的事件相关,这存在一些神秘的问题

我们只为消息使用接口,并使用
NServiceBus.MessageInterfaces.MessageMapper.Reflection.MessageMapper().CreateInstance()
创建要放到总线上的实例

我们的界面:

IOperationOccured
-包含基本操作信息,此事件的订阅者以相当通用的方式进行操作。此事件从未直接引发

ISpecificOperationOccured
-继承
IOperationOccured
。包含更具体的信息。此事件的订阅者可以做更具体的事情,因为该事件更具体

问题是,当引发
isSpecificOperationOccured
时,调用
IOperationOccured
的处理程序,调用
isSpecificOperationOccured
的处理程序,然后再次处理消息,再次调用处理程序


我误解了什么?我希望
IOperationOccured
的处理程序在每个事件中调用一次,而
isSpecificOperationOccured
的处理程序在每个事件中调用一次。

我知道答案晚了,但希望这能帮助其他人

当IOperationOccured和ISpecificOperationOccured的单独处理程序部署在同一端点中时,会发生这种情况。e、 g

  • 端点1(引发IsSpecificOperationOccered)
  • Endpoint2(处理IOperationOccured和IsSpecificOperationOccured)
Endpoint1。订阅将包含以下项:

  • IOperationOccured->Endpoint2
  • i发生特定操作->端点2
因此,当IsSpecificOperationOccured发布时,它将被发送到Endpoint2两次。建议的方法是使用单独的端点来处理不同的消息类型。e、 g

  • 端点1(引发IsSpecificOperationOccered)
  • Endpoint2(处理IOperationOccered)
  • 端点3(句柄为特定操作)

您可以只使用Bus.CreateInstance()来实例化接口。我无法在具有类似层次结构的测试解决方案中重新设置此接口,您能否向我们展示处理程序的设置方式以及具体的消息实现?@Udi Dahan:这与使用MessageMapper有实质性区别吗?我们实际上已经用一些验证代码包装了MessageMapper…@foosnazzy:没有具体的消息实现。处理程序是
IHandleMessages
的直接实现。确保
IOperationOccured
继承
IMessage
,而不是
ISpecificOperationOccured
,那么它们是否被代理?我只是想知道这是不是让我们失望的部分。显示将消息放在总线上的代码以及示例处理程序签名将有所帮助。您能提供推荐方法的参考吗?此方法的文档很少,但您可以在此处找到一些指导:,此解决方法非常烦人。对我来说,这似乎是一个错误。如果将句柄移动到两个端点会更改消息的处理次数,则设计是错误的。