响应式扩展——返回相同的可观察对象或创建新的



我正在尝试用Rx设计一个服务层抽象。我已经使用FromAsyncPattern封装了所有的web服务调用。我将有多个ViewModels订阅这些可观测值,有些可以有多个订阅。

  • 我应该在我的ServiceProxy类(单例)中创建readonly IObservable<T>属性并在构造函数中构造一次,还是我应该每次在服务方法中创建新的可观察对象并返回它们?

  • 重要吗?

it matter ?

在本例中,no。这就是可观察对象(就像Create返回的)和可观察对象之间的区别。FromAsyncPattern返回一个AsyncSubject,这意味着它将把结果"重播"给任何订阅者(所以,它是冷的,但不是完全相同的方式,更像是"冷")。

另一方面,

Create最终将为每个订阅者重新运行代码(就像如果您有一个L2S查询一样,在它上运行Foreach将发出另一个数据库调用)。有时候这是你想要的,有时候不是。

要让一个Cold可观察对象变成Hot可观察对象,请在末尾加上这句话:

.Multicast(new Subject<TTheType>()).RefCount();
如果你想要一个热的可观察对象(比如observable . start),然后把它设为冷的,使用Defer:
var coldObs = Observable.Defer(() => 
    Observable.Start(() => doSomethingAndReturnAValue()));

这意味着,每次有人订阅coldObs, dosomethingandreturnavvalue被调用。

你不能创建IObservalble<T>属性来表示使用FromAsyncPattern创建的IObservable,因为这个方法返回一个函数,当调用适当的值时将返回一个IObservable<T>(其中T是原始底层同步方法的返回类型)。所以你的Rx抽象层将有一些方法,这些方法将实际参数作为原始服务层方法,但不是T返回IObservable<T>

相关内容

  • 没有找到相关文章