没有对象就无法观察到



有没有办法在不使用主题的情况下创建一个热门的可观察对象?例如,要提供一个事件样式的可观察对象,你可以使用subject:

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

我不讨厌它,但是我不喜欢使用Subject。感觉使用它会引入额外的状态和生命周期管理问题。我知道我可以使用Observable.Create实现并且只跟踪订阅者,但这感觉是完全相同的问题。

是否有更优雅的解决方案,还是我一开始就担心它只是迂腐?


我花这么多心思在这件事上的原因。我最近得到了一些遗留代码,其中包含需要删除的事件类型,并将其替换为可观察对象。所有这些事件都以同样的方式设置:

public event EventHandler MyEvent { add; remove;}
protected void OnMyEvent() { ... }

然后分散在整个类型中是对OnMyEvent()的各种调用。我把它交给了一个初级开发人员,让他们用对象支持的可观察属性替换事件,并让Onxxx实现向对象推送一个新值。但是,从那时起,我一直在担心它,并想知道是否可能有另一种解决方案,因为我讨厌产品代码中的主题。

如果我理解正确的话,你们的要求是:

  • 公开IObservable<T>
  • 在类中,能够触发它的OnNext, OnErrorOnCompleted

这归结为需要实现IObserver<T>IObservable<T>的东西,但只公开IObservable<T>ISubject<T>被定义为实现这两个接口,一个普通的Subject<T>是它最简单的实现。

你目前的解决方案是尽可能简单直接的,其他任何事情都需要你自己重新设计一个Subject<T>

相关内容

  • 没有找到相关文章

最新更新