Реактивные расширения: разрешается только один подписчик для каждого типа

Есть ли способ гарантировать, что для общего типа может быть зарегистрирован максимум один подписчик на тип? Пример объяснил бы это лучше:

public interface Message
{

}

public class Command : Message
{

}

public class Event : Message
{

}

public class Bus
{
    private readonly IObservable<Message> _stream;
    private readonly Subject<Message> _subject;

    public Bus()
    {
        _subject = new Subject<Message>();
        _stream = _subject.AsObservable();
    }

    public IDisposable Subscribe<T>(IObserver<T> observer) where T:Command
    {
        return _stream.OfType<T>().Subscribe(observer);
    }

    public void Execute<T>(T command) where T:Command
    {
        _subject.OnNext(command);
    }
}

Я хотел бы убедиться, что более одного наблюдателя не могут подписаться на один и тот же тип команды. Есть ли что-то в Rx, что позволяет это, или я ограничен: а) самостоятельно проверяю типы или б) не занимаюсь этим во время регистрации и использую временного подписчика для обнаружения нескольких регистраций?

1 ответ

Решение

Я не думаю, что Rx предоставляет какие-либо встроенные механизмы для этого. Учитывая ваш пример кода, я бы просто сделал Dictionary<Type, IObserver<T>> и использовать его в своем Subscribe метод для обеспечения вашего ограничения.

Другие вопросы по тегам