Ребус с Azure Сервисная шина, подпишись на интерфейс - PullRequest
1 голос
/ 01 марта 2020

Я хотел бы получать все сообщения, которые реализуют указанный c интерфейс:

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?

1 Ответ

1 голос
/ 01 марта 2020

Можно ли подписаться на базовый интерфейс / класс, используя Rebus?

К сожалению, нет.

Пока Rebus имеет polymorphi c рассылка , это относится только к тому моменту, когда сообщение было получено и должно быть отправлено обработчикам.

Поэтому, если вы хотите получить все конкретные типы, которые реализуют IBusItem, вам нужно вызвать await bus.Subscribe<ConcreteBusItem>() для каждого из них.

...