System.Reactive:实现IObservable <t>

时间:2017-06-10 08:21:18

标签: system.reactive

我需要创建自定义IObservable。我已经在那里读了一下,我结束了,我不应该直接实现IObservable<T>

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

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

我该如何实施这种方法?

2 个答案:

答案 0 :(得分:1)

我不知道您的问题,但是如果您可以替换实现IObservable来公开返回IObservable的属性/方法,那么您将会感觉好多了。如果你能做到这一点,你可以轻松地从某些Rx's create methods返回一个基于Rx的Observable。

如果你不能这样做,我建议包装一个Subject<T>

public class MyIntObservable : IObservable<int>
{
    private readonly Subject<int> _mySubject = new Subject<int>();

    public IDisposable Subscribe(IObserver<int> observer)
    {
        return _mySubject.Subscribe(observer);
    }
}

答案 1 :(得分:1)

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

通过简要介绍一下您想要模仿的“商店”类,它似乎是某种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