我目前正在开发一个示例项目,我在后端使用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>
此外:
ICommand
和IEvent
标记接口标记了所有消息。我的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"));
}
答案 0 :(得分:0)
您的配置将事件定义为以“Event”结尾的任何类。 “object”不符合此条件,因此您不会在通用处理程序中收到消息。
您需要使用IEvent:
double