有没有一种方法可以创建一个热观察而不使用主题?例如,为了提供一个事件式观察的您可以使用一个主题:没有主题的热观察
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
来实现,只是跟踪订阅者,但感觉就像是完全一样的问题。
有没有更优雅的解决方案,或者我只是因为担心它首先被迂腐?
UPDATE
,我甚至把这么多想进入这个摆在首位的原因。我最近得到了一些遗留代码,其中包含需要删除并替换为可观察事件的事件。所有这些事件都分别设立了以同样的方式:
public event EventHandler MyEvent { add; remove;}
protected void OnMyEvent() { ... }
然后散落在整个该类型是OnMyEvent()
各种调用。我把它交给了一个初级开发人员,让他们用主题支持的可观察属性取代事件,并让Onxxx
实现为这个主题注入了新的价值。但是从那以后,我一直在嘲笑它,并想知道是否还有其他解决方案,因为我厌恶生产代码中的主题。
通常情况下,如果你想使用一个接口,它需要一个实现。只是在说。 –
我知道你的意思,但我想我会把它放在那里,以防万一有一些我错过了。它感觉像一个反模式。 – MojoFilter
真正的问题是:谁在打电话给OnThingHappening,为什么?也许你需要一个主题。也许你没有。但答案在于这个类的使用,而不是它的实现。 –