我想接收所有正在实现特定接口的消息:
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订阅基本接口/类?
答案 0 :(得分:1)
是否可以使用Rebus订阅基本接口/类?
不幸的是,没有。
尽管Rebus具有polymorphic dispatch,但这仅适用于已接收到消息并将其分派给处理程序的情况。
因此,如果要接收实现IBusItem
的所有具体类型,则需要为它们中的每一个调用await bus.Subscribe<ConcreteBusItem>()
。