Реактивные расширения: разрешается только один подписчик для каждого типа
Есть ли способ гарантировать, что для общего типа может быть зарегистрирован максимум один подписчик на тип? Пример объяснил бы это лучше:
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
метод для обеспечения вашего ограничения.