是否有Observable<T>
类的子类公开对Notify<T>(T value)
方法(或访问Notifier
,扩展方法)的访问权限,以便我们可以临时调用observable.Notify(t)
所有订阅都被通知(OnNext
在同一个线程上调用。)
我对FromEventPattern
不感兴趣。
答案 0 :(得分:3)
ISubject<T>
界面继承IObservable<T>
和IObserver<T>
。
var subject = new Subject<string>();
subject.Subscribe(text => Console.WriteLine(text));
subject.OnNext("Hello");
subject.OnNext("World!");
IObserver<T>.OnNext
基本上是您的Notify
方法。
更多阅读:
答案 1 :(得分:2)
你当然可以使用Subject<string>
来提供一个观察者的对象(即你可以调用.OnNext(string)
)并且是一个可以订阅的可观察对象。
唯一的缺点是,任何有权访问Subject<string>
的代码也可以致电.OnCompleted()
或.OnError(...)
并破坏您的订阅者代码。
另一种选择是这样做:
Action<string> notify = null;
var observable = Observable.FromEvent<string>(h => notify += h, h => notify -= h);
var subscription = observable.Subscribe(x => Console.WriteLine(x));
notify("Hello");
你现在有了一个简单的Action<string>
委托,你可以调用它来推送一个值,只要你保持订阅活着,客户就不能通过对.OnCompleted()
或{的恶意电话来杀死你的程序{1}}。