我的User
模型具有IObservable<int>
属性。此属性由BehaviorSubject
支持,该.Value
使用特定值进行初始化。如何获取observable的当前值,而不必暴露另一个访问基础BehaviorSubject
上的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
。这对我来说已经很奇怪了,如果我可以将IObservable
observable视为get和set属性而不是唉......那会更好。
在我的代码的另一部分,我需要命令性地获取给定用户的当前值,而我似乎无法直接从Latest
接口找到一种方法。我尝试使用MostRecent
和public int CurrentValue => mySubject.Value;
方法,但它们似乎做的不同于我的预期。尝试两者时,我的应用程序无限期地阻止。
我发现正确公开价值的唯一方法是为&#34;当前&#34;创建另一个属性。价值,像这样:
Value()
我不喜欢这样,因为我觉得我是多余的。有没有更好的方法来公开observable的当前值,以便外部代码可以获得值并用它做它想要的东西?就此而言,正如我之前评论的那样,我也不太乐意使用另一种方法来改变价值。在我看来,它使对象的界面变得麻烦。例如,在knockoutjs中,我可以通过&#34;调用&#34;来获取和设置值。可观察的,似乎更简单。在这种情况下,这相当于hsv
。
答案 0 :(得分:2)
您可以随时执行其中一项操作,具体取决于您是否处于async
上下文中:
var value = await user.Value.FirstAsync();
var value = user.Value.First();
或者,您可以这样做:
class User
{
private readonly BehaviorSubject<int> valueSubject;
public int Value
{
get { return valueSubject.Value; }
set { valueSubject.OnNext(value); }
}
public IObservable<int> ValueChanged => valueSubject.DistinctUntilChanged();
public User()
{
valueSubject = new BehaviorSubject<int>(100);
}
}