反应式扩展:每种类型只允许一个订阅者



有没有办法确保泛型类型每种类型最多可以注册一个订阅者?一个例子可以更好地解释它:

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 中是否有允许这样做的内容,或者我仅限于:a) 自己查找类型或b) 在注册过程中不处理它,并使用临时订阅者来检测多个注册?

我不认为 Rx 为此提供了任何内置机制。 给定您的示例代码,我只需创建一个Dictionary<Type, IObserver<T>>并在您的Subscribe方法中使用它来强制执行约束。

相关内容

  • 没有找到相关文章

最新更新