在这种情况下实现ObservableBase是最好还是有另一种方法?

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>>在基类的某个地方实现.

ale*_*.98 0

这次讨论只是给了我一个想法。不就是这个吗?

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)

因此,在我看来,我们避免了额外的级别、额外的可观察量,只有单一的可观察类型,基本上我只看到优点,没有缺点。