创建一个热的可观察对象并向其添加内容

时间:2015-06-12 14:34:52

标签: system.reactive

我正在尝试创建一个热的observable,我可以在其中添加内容。这是基本类的概述

public class MyObservable
{
    public IObservable<string> Stream;

    public MyObservable()
    {
         Observable.Create...?
    }

    public void AddString(string eventDescription)
    {
       //Add to Stream
    }
}

代码中的其他地方我希望能够执行类似

的操作
var ob = new MyObservable();
MyObservable.Add("User created");

然后在其他地方:

ob.Stream.Subscribe(Console.WriteLine);

我不确定我应该如何向可观察的

添加字符串

编辑:我尝试过做这样的事情,但我不确定我是不是按照它应该做的方式做事

    private IObserver<string> _observer;

    public void Add(string e)
    {
        if(Stream == null) 
        { 
            Stream = Observable.Create<string>(
                (IObserver<string> observer) =>
                {
                    _observer = observer;
                    observer.OnNext(e);
                    return Disposable.Empty;
                });
        }
        else
        {
              _observer.OnNext(e);
        } 

    }

1 个答案:

答案 0 :(得分:3)

您应该多阅读observables and observers

的合同

无论如何,您正在寻找的是Subject,它实现了ObservableObserver接口。

如果你还想包装它,它会是这样的:

public class MyObservable
{
  private Subject<string> subject; 
  public IObservable<string> Stream 
  { 
    get { return this.subject.AsObservable();

  }

  public MyObservable()
  {
    subject = new Subject<string>();
  }

  public void AddString(string eventDescription)
  {
    //Add to Stream
    this.subject.OnNext(eventDescription);
  }
}