Rebus with Azure Service Bus,订阅一个接口

Rebus with Azure Service Bus, subscribe to an interface

我想接收实现特定接口的所有消息:

public interface IBusItem
{
    Guid BusItemId { get; }
    DateTime Timestamp { get; }
}

例如,我有这样一条消息:

public class SomeMessage : IBusItem
{
    public Guid BusItemId { get; set; } = Guid.NewGuid();
    public DateTime Timestamp { get; set; } = DateTime.UtcNow;
    public string Message { get; set; }
}

我有一个用于 SomeMessage 的处理程序和另一个用于 IBusItem 的处理程序。 如果在接收器中我这样做:

bus.Subscribe<SomeMessage>();

然后调用两个处理程序。

但是如果我只想订阅 IBusItem:

bus.Subscribe<IBusItem>();

然后没有处理程序被调用

是否可以使用 Rebus 订阅基地 interface/class?

Is it possible to subscribe to a base interface/class using Rebus?

很遗憾,没有。

虽然 Rebus 有 polymorphic dispatch,但这仅适用于已收到消息并将被分派给处理程序的情况。

因此,如果您想接收所有实现 IBusItem 的具体类型,您需要为每个具体类型调用 await bus.Subscribe<ConcreteBusItem>()