我有一个User
模型,它具有IObservable<int>
属性。该属性由一个BehaviorSubject
支持,该值用特定值初始化。如何获得可观察值的当前值,而无需公开访问底层BehaviorSubject
上.Value
属性的另一个属性?如何获得作为IObservable公开的主题的当前值?
这是样品模型来考虑:
class User
{
private readonly BehaviorSubject<int> mySubject;
public User()
{
mySubject = new BehaviorSubject<int>(100);
}
public IObservable<int> Value => mySubject.DistinctUntilChanged();
public void SomeMethod(int level)
{
mySubject.OnNext(level);
}
}
请注意,我有一个具有指定值对象调用OnNext
的方法。这对我来说已经很奇怪了,如果我可以将Value
作为get和set属性来对待会更好,但是唉...
在我的代码的另一部分,我需要命令性地获取当前值一个给定的用户,我似乎无法找到直接从IObservable
界面执行此操作的方法。我尝试使用Latest
和MostRecent
方法,但他们似乎做了不同于我所期望的事情。当同时尝试时,我的应用程序将无限期阻止。
我找到正确曝光值的唯一方法是创建另一个属性为“当前”值,就像这样:
public int CurrentValue => mySubject.Value;
我不喜欢这个,因为感觉对我来说,我m是多余的。有没有更好的方法来公开observable的当前值,以便外部代码可以获得该值并按照它的要求执行操作?就此而言,正如我之前评论的那样,我也不是很高兴有另一种方法来改变价值。在我看来,它使得对象的界面变得麻烦。例如,在knockoutjs中,我可以通过“调用”observable来获取和设置值,这看起来更简单。在这种情况下,这将相当于Value()
。