【发布时间】:2015-09-04 12:06:41
【问题描述】:
我有一个具有IObservable<int> 属性的User 模型。此属性由使用特定值初始化的BehaviorSubject 支持。如何获取 observable 的当前值,而不必公开另一个访问底层 BehaviorSubject 上的 .Value 属性的属性?
这是要考虑的示例模型:
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 observable 视为 get 和 set 属性会更好,但是唉......
在我的代码的另一部分,我需要强制获取给定用户的当前值,但我似乎无法直接从IObservable 接口找到一种方法来执行此操作。我尝试同时使用Latest 和MostRecent 方法,但它们的作用似乎与我的预期不同。两者都尝试时,我的应用程序会无限期阻塞。
我发现正确公开该值的唯一方法是为“当前”值创建另一个属性,如下所示:
public int CurrentValue => mySubject.Value;
我不喜欢这样,因为我觉得我是多余的。有没有更好的方法来公开 observable 的当前值,以便外部代码可以获取该值并用它做它想做的事情?就此而言,正如我之前评论的那样,我也不太高兴有另一种方法来改变值。在我看来,它使对象的界面很麻烦。例如,在 knockoutjs 中,我可以通过“调用”可观察对象来获取和设置值,这似乎更简单。在这种情况下,这将等同于 Value()。
【问题讨论】:
标签: .net system.reactive observable