ale*_*.98 5 .net c# system.reactive observable
首先,我没有找到ObservableBase或AnonymousObservable的自定义实现的好例子.我不知道在我的情况下我需要实施哪一个.情况就是这样.
我使用第三方库,有一个类让我们称它为Producer,它允许我像objProducer.Attach(MyHandler)一样设置一个委托.MyHandler将接收来自制作人的消息.我正在尝试围绕Producer创建一个包装器,使其可观察,理想情况下它是一个独特的类型,而不是只创建一个observable实例(如Observable.Create).
已编辑:第三方制作人具有以下界面
public delegate void ProducerMessageHandler(Message objMessage);
public class Producer : IDisposable {
public void Start();
public void Attach(ProducerMessageHandler fnHandler);
public void Dispose();
}
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,我无法控制它的源代码.它的目的是这样使用:创建一个实例,调用Attach并传递一个委托,调用Start,它基本上在Producer接收或生成它们时,在提供的委托中启动接收消息.
我正在考虑创建公共,class ProducerObservable : ObservableBase<Message>以便当有人订阅它时,我会(Rx库)将消息推送给观察者.看来我需要在我的ProducerObservable的构造函数中调用Attach,然后我需要以某种方式在附加到它的观察者上调用OnNext.这是否意味着我必须对所有这些进行编码:LinkedList<IObserver<Message>>向类中添加观察者列表,然后在ProducerObservable上调用SubscribeCore抽象方法时添加观察者?然后显然我可以枚举LinkedList<IObserver<Message>>MyHandler并为每一个调用OnNext.所有这些看起来都可行,但感觉并不完全正确.我希望.net反应式扩展能够更好地为这种情况做好准备,至少LinkedList<IObserver<Message>>在基类的某个地方实现.
这次讨论只是给了我一个想法。不就是这个吗?
public class ProducerObservable : IObservable<Message>, IDisposable {
private readonly Producer _Producer;
private readonly Subject<Message> _Subject;
public ProducerObservable() {
_Produder = new Producer();
_Producer.Attach(Message_Received);
_Subject = new Subject<Message>();
_Producer.Start();
}
public void Dispose() {
_Producer.Dispose();
_Subject.Dispose();
}
public IDisposable Subscribe(IObserver<Message> objObserver) {
return _Subject.Subscribe(objObserver);
}
private void Message_Received(Message objMessage) {
_Subject.OnNext(objMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,我们避免了额外的级别、额外的可观察量,只有单一的可观察类型,基本上我只看到优点,没有缺点。