.NET Framework中IObservable <t>的默认实现

时间:2016-03-04 15:24:02

标签: .net system.reactive

.NET框架本身是否有IObservable的默认实现,或者我必须使用像Rx这样的第三方框架? 我问的原因是我正在尝试创建一个可重用的组件,需要公开IObservable类型的属性,我不想将这个组件与任何这样的第三方框架联系起来。

编辑:第三部分我的意思是实施不是BCL的一部分。即使Rx归MS所有,它也不是核心.NET框架的一部分

2 个答案:

答案 0 :(得分:3)

.NET BCL中没有IObservable<T>的实现。也就是说,我强烈建议不要写自己的。喜欢,真的强烈。一百万。 使用Rx框架。如果有一项政策阻止你这么做,那就非常非常错误。就像你的实施几乎可以肯定的是,如果你自己尝试了......它看起来很难做对。 甚至连我工作过的众多投资银行中的一家(通常是第三方代码中最大的三色紫罗兰)也不足以让Rx被使用。我可能这个建议有点过于脆弱,模糊和间接,请原谅我。

答案 1 :(得分:1)

我个人认为这是一个很好的问题。 OP希望限制其依赖性,从而创建一个更强大的库。对此表示赞赏。

然而,就目前而言,其他评论/答案来自大量经验。实现自己的IObservable<T> / IObserver<T>不是一个好主意。但我也注意到你并没有说你想要。

目前的答案很简单,没有 - 在BCL中没有IObservable<T> / IObserver<T>接口的实现。这是MS有意识地决定允许Rx以比BCL更快的速度进化。这意味着实际上你需要通过Nuget依赖Rx。为了使您的代码真正具有任何功能,至少需要Rx-Linq(以及Rx-Core&amp; Rx-Interfaces),其Observable静态类可以访问{{1} },Observable.CreateInterval等。

如果您的组件是UI组件,那么您可能需要依赖EmptyRx-Main。幸运的是,Rx版本的节奏现在非常慢,并且他们小心地遵循语义版本控制,因此次要版本的版本不应该破坏您的代码并允许您对Rx具有灵活的依赖性。这将使您的客户能够定位更新版本的Rx,如果它们确实出来并且您的lib仍然可以正常工作。