我有一个公开IObservable
状态的 API。但是这种状态取决于必须通过初始化的底层可观察源Init
。
我想做的是保护用户不必以正确的顺序做事:就目前的情况而言,如果他们Status
在执行之前尝试订阅Init
,他们会得到一个异常,因为他们的源没有初始化。
所以我有一个天才的想法,使用 aSubject
将两者解耦:订阅 my 的外部用户Status
只是订阅了 Subject,然后当他们调用 时Init
,我使用我的 Subject 订阅底层服务。
代码中的想法
private ISubject<bool> _StatusSubject = new Subject<bool>();
public IObservable<bool> Status { get { return _StatusSubject; } }
public void Init()
{
_Connection = new Connection();
Underlying.GetDeferredObservable(_Connection).Subscribe(_StatusSubject);
}
但是,从对虚拟项目的测试来看,问题在于初始化通过订阅 Subject 来“唤醒”我的底层 Observable,即使还没有人订阅该主题。如果可能的话,我想避免这种情况,但我不确定如何......
(我也注意到“一般规则是,如果你使用一个主题,那么你做错了什么”这一公认的智慧)