Reactive Extensions IObservable在订阅者订阅时通知

时间:2011-03-28 22:15:39

标签: .net system.reactive

我有一个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收到通知。

2 个答案:

答案 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();