【问题标题】:System.Reactive: Implement an IObservable<T>System.Reactive:实现一个 IObservable<T>
【发布时间】:2017-06-10 08:21:18
【问题描述】:

我需要创建一个自定义IObservable。我在那里读了一点,我最终不应该直接实现IObservable&lt;T&gt;

我注意到有一个ObservableBase&lt;T&gt;。这是一个抽象类,所以我需要实现抽象方法:

public class Store<TState> : ObservableBase<TState>, IObserver<IAction>
{
    public void OnCompleted()
    {
        throw new NotImplementedException();
    }

    public void OnError(Exception error)
    {
        throw new NotImplementedException();
    }

    public void OnNext(IAction value)
    {
        throw new NotImplementedException();
    }

    protected override IDisposable SubscribeCore(IObserver<TState> observer)
    {
        >>>>>>>>>>>>>>>>>******<<<<<<<<<<<<<<<<<<<<<<<
        throw new NotImplementedException();
    }
}

我应该如何实现这个方法?

【问题讨论】:

    标签: system.reactive


    【解决方案1】:

    我不知道您的问题,但是如果您可以替换实现 IObservable 以公开返回 IObservable 的属性/方法,那么您的情况会好很多。如果你能做到这一点,你可以很容易地从Rx's create methods 中返回一个基于 Rx 的 Observable。

    如果你不能这样做,我建议包装一个Subject&lt;T&gt;

    public class MyIntObservable : IObservable<int>
    {
        private readonly Subject<int> _mySubject = new Subject<int>();
    
        public IDisposable Subscribe(IObserver<int> observer)
        {
            return _mySubject.Subscribe(observer);
        }
    }
    

    【讨论】:

    • 我将尝试更深入地解释一下我想要得到的东西......有一个使用称为ngrx的角度的Redux“模式”实现。这个库在我的口味中提供了一个非常优雅的 Redux 实现,所以我试图将它“翻译/移植”到 C# 中。我现在要翻译的主要课程是Store。您可以关闭liftreplaceReducer 和其他关注nextcompleted、...关于我们评论的所有内容的任何想法?
    • 对不起,我没有完全关注你,我不确定这与原始问题有何关系。
    【解决方案2】:

    我猜你不想做你正在做的事情。

    简要查看您要模仿的“Store”类,它似乎是某种SubjectSubject 既是 IObserver 又是 IObservable,并且有许多开箱即用的实现。界面如下:

    public interface ISubject<in TSource, out TResult> : IObserver<TSource>, IObservable<TResult>
    {
    }
    

    这是一篇关于主题以及何时在此处使用它们的非常好的文章: http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多