有没有办法在不使用主题的情况下创建一个热可观察对象?例如,要提供事件风格的可观察对象,您可以使用主题:
class MySouce
{
private Subject<string> thingsSubject = new Subject<string>();
public IObservable<string> ThingsThatHappen
{
get { return this.thingsSubject; }
}
private void OnThingHappening(string thing)
{
this.thingsSubject.OnNext(thing);
}
}
我不讨厌它,但我不喜欢使用主题。感觉就像使用它会引入额外的状态和生命周期管理问题。我知道我可以实现使用Observable.Create
并仅跟踪订阅者,但这感觉就像是完全相同的问题。
有没有更优雅的解决方案,或者我只是因为担心它而变得迂腐?
更新
我什至一开始就考虑这么多的原因。我最近收到了一些遗留代码,其类型包含需要删除并替换为可观察对象的事件。所有这些事件都以相同的方式设置:
public event EventHandler MyEvent { add; remove;}
protected void OnMyEvent() { ... }
然后分散在整个那种类型的是各种调用OnMyEvent()
。我把它交给了一位初级开发人员,让他们用主题支持的可观察属性替换事件,并让Onxxx
实现为主题推送一个新值。不过,从那以后,鉴于我对生产代码中的主题的反感,我一直对此感到不安,并想知道是否还有其他解决方案。