System.Reactive:实现一个 IObservable<T>

问题描述 投票:0回答:2

我需要创建自定义

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

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

c# system.reactive
2个回答
1
投票

我不知道你的问题,但如果你可以替换实施

IObservable
来公开返回
IObservable
的属性/方法,你会好很多。如果你能做到这一点,你可以轻松地从一些 Rx 的创建方法.

返回一个基于 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
投票

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

简单看一下您要模仿的“商店”类,它似乎是某种

Subject
Subject
既是
IObserver
又是
IObservable
并且有许多开箱即用的实现。这是界面:

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

这是一篇关于

Subject
以及何时使用它们的非常好的文章: https://www.davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx

© www.soinside.com 2019 - 2024. All rights reserved.