反应式扩展 IObservable 在订阅者订阅时发出通知

发布于 2024-10-27 03:37:27 字数 632 浏览 6 评论 0原文

我有一个 Subject,我希望在订阅它时收到通知。我找不到这方面的机制。我错过了什么吗?

例如:

    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>(); } }

    }

当任何其他代码调用 AccountEvents 属性上的 Subscribe 时,是否可以通知 AccountManager

I have a Subject<T> and I want to be notified when something subscribes to it. I cannot find a mechanism for this. Am I missing something?

For example:

    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>(); } }

    }

Can AccountManager be notified when any other code calls Subscribe on the AccountEvents property.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

生生漫 2024-11-03 03:37:27

无论是这个

        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:你的逻辑要求它。

Either this

        var subj = new Subject<string>();
        var o = Observable.CreateWithDisposable<string>(observer =>
                                            {
                                                Console.WriteLine("subscribed");
                                                return subj.Subscribe(observer);
                                            });

or (similar to Scott's answer)

        var o = Observable.Defer(() =>
                                     {
                                         Console.WriteLine("subscribed");
                                         return subj;
                                     });

In the first case you have more freedom, since you have an observer passed in as a parameter, so in addition to routing subject output to the observer you can call observer.OnNext, OnError, OnComplete when your logic demands it.

染墨丶若流云 2024-11-03 03:37:27

这一切都很丑陋,但可能会起作用

var subj = new Subject<string>();
var io = Observable.Defer(() => Observable.Return("Subscribed")
                                          .Do(Console.WriteLine))
                   .Concat(subj);
 io.Subscribe();

This is ugly all, but could possibly be made to work

var subj = new Subject<string>();
var io = Observable.Defer(() => Observable.Return("Subscribed")
                                          .Do(Console.WriteLine))
                   .Concat(subj);
 io.Subscribe();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文