0

ジェネリック型の型ごとに最大 1 つのサブスクライバーを登録できるようにする方法はありますか? 例はそれをよりよく説明します:

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);
    }
}

複数のオブザーバーが同じ種類の Command にサブスクライブできないようにしたいと思います。それを可能にする何かが Rx にありますか、それとも私は次のように制限されていますか?

4

1 に答える 1

1

私は、Rx がこのための組み込みメカニズムを提供しているとは思いません。あなたのサンプルコードを考えると、私は を作成し、それをメソッドDictionary<Type, IObserver<T>>内で使用Subscribeして、制約を適用します。

于 2013-09-26T13:02:56.557 に答える