Che*_*tah 12 c# subject system.reactive
因此,我一直在阅读那些使用Subject<T>"不好"的内容 - 我赞同这种推理.
但是,我试图想出避免使用它的最佳方法并有一个例子.
目前,我有一个持久化配置类的抽象类,它上面有一个受保护的Save()方法,只要更改属性应该保持该类,就会调用该类.此消息将消息泵送到Subject<T>通过IObservable<T>接口公开的消息,该接口由序列化服务侦听并序列化该类.这似乎是当时实现这一目标的最明显,最简单,最快捷的方式.
那么在不使用主题的情况下,RX方式会是什么呢?我是否会公开一个事件并使用Observable.FromEventPattern()订阅它? - 因为这似乎是一种更复杂的方式.
Jam*_*rld 14
这并不是说使用Subject<T>是坏的 - 必须有某种方式"进入monad" - 这是说"得到IObservable<T>"的学术方式.你需要从某个地方开始.
Subject<T>当从订阅中使用而不是将现有的可观察对象链接在一起时,问题就会出现.主题应该只存在于Rx机器的边缘.
如果没有提供入口点(例如FromEvent,FromEventPattern,FromAsync,Return,ToObservable()等)的,那么你使用的工作Subject<T>是非常有效的.并且没有必要为了便于使用上述其中一个而增加额外的复杂性 - 无论如何,它们中的大多数都使用主题或类似主题的结构.
在你的情况下,听起来Subject<T>就好.您可以通过AsObservable()隐藏实现细节来查看它的内容.