创建一个热可观察对象并向其添加内容
Creating a hot observable and adding things to it
我正在尝试创建一个热 observable,我可以在其中添加内容。这是基本的大纲 class
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);
我不太确定应该如何将字符串添加到 observable
编辑:我试过做这样的事情,但我不确定我是否没有按照预期的方式做事
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);
}
}
你应该多读读 observables and observers
的合同
无论如何,您正在寻找的是 Subject
,它实现了 Observable
和 Observer
接口。
如果你还想包装它,它看起来像这样:
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);
}
}
我正在尝试创建一个热 observable,我可以在其中添加内容。这是基本的大纲 class
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);
我不太确定应该如何将字符串添加到 observable
编辑:我试过做这样的事情,但我不确定我是否没有按照预期的方式做事
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);
}
}
你应该多读读 observables and observers
的合同无论如何,您正在寻找的是 Subject
,它实现了 Observable
和 Observer
接口。
如果你还想包装它,它看起来像这样:
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);
}
}