NServicebus Generic MessageHandler未被调用

时间:2016-01-01 14:39:34

标签: c# generics nservicebus handlers message-handlers

我目前正在开发一个示例项目,我在后端使用NServiceBus来发布事件。然后,后端应该通过一组处理程序处理自己的事件。当我为每个事件实现一个特定的处理程序时,这样可以正常工作:

public sealed class MyEventHandler : IHandleMessages<MyEvent> { }

public sealed class OtherEventHandler : IHandleMessages<OtherEvent> { }

但是,由于这些处理程序只是将事件分派给另一个处理器,我想清理一下并只实现一个通用的消息处理程序:

public sealed class GenericHandler : IHandleMessages<object> { }

不幸的是,通用处理程序仅针对项目中存在另一个特定处理程序的消息类型调用。换句话说,当我将MyEventHandler留在源中时,GenericHandler正确接收MyEvent事件,但是当我删除此(现在已过时)处理程序时停止接收此消息。实际上,我的目标是从项目中删除所有特定处理程序,并仅使用单个GenericHandler。我错过了配置的基本步骤吗?

NServiceBus-config看起来像这样:

<UnicastBusConfig>
  <MessageEndpointMappings>
    <add Assembly="Kingo.Samples.Chess.Api" Endpoint="kingo.samples.chess" />      
  </MessageEndpointMappings>
</UnicastBusConfig>

此外:

  • 上面提到的Api-assembly包含所有需要发布和处理的事件。
  • 我使用NServiceBus中的ICommandIEvent标记接口标记了所有消息。
  • 我将NServiceBus V5(Core)与NServiceBus.Host V6结合使用。
  • 我的EndpointConfig中有以下自定义总线配置:

    void IConfigureThisEndpoint.Customize(BusConfiguration configuration)
    {                                     
    
        configuration.AssembliesToScan(GetAssembliesToScan("*Chess.Api.dll", "*Chess.dll"));            
        configuration.UsePersistence<InMemoryPersistence>();
        configuration.UseContainer<UnityBuilder>();
        configuration.UseSerialization<JsonSerializer>();
    
        configuration.Conventions().DefiningEventsAs(type => type.Name.EndsWith("Event"));
    }
    

1 个答案:

答案 0 :(得分:0)

您的配置将事件定义为以“Event”结尾的任何类。 “object”不符合此条件,因此您不会在通用处理程序中收到消息。

您需要使用IEvent:

double