我有一个Subject<T>
,我希望在订阅它时收到通知。我找不到这个机制。我错过了什么吗?
例如:
public class AccountManager
{
private ReplaySubject<string> _accountEvents = new ReplaySubject<string>();
public AccountManager()
{
}
public void Add(string val)
{
_accountEvents.OnNext(val);
}
public IObservable<string> AccountEvents { get { return _accountEvents.AsObservable<string>(); } }
}
当任何其他代码在AccountManager
属性上调用Subscribe
时,可以AccountEvents
收到通知。
答案 0 :(得分:5)
这个
var subj = new Subject<string>();
var o = Observable.CreateWithDisposable<string>(observer =>
{
Console.WriteLine("subscribed");
return subj.Subscribe(observer);
});
或(类似于斯科特的回答)
var o = Observable.Defer(() =>
{
Console.WriteLine("subscribed");
return subj;
});
在第一种情况下,你有更多的自由,因为你有一个观察者作为参数传入,所以除了将主题输出路由到观察者之外,你可以在逻辑需要时调用observer.OnNext,OnError,OnComplete。 / p>
答案 1 :(得分:0)
这很丑陋,但可能会起作用
var subj = new Subject<string>();
var io = Observable.Defer(() => Observable.Return("Subscribed")
.Do(Console.WriteLine))
.Concat(subj);
io.Subscribe();