如何对事件总线使用反应式扩展

Can*_*rse 2 c# linq system.reactive

我很难弄清楚如何使用反应式扩展在 C# 中创建事件总线,而无需使用主题类,据我所知,不建议这样做。

大多数 IEvent 是我自己的,但有些像鼠标和键盘事件将由 WPF 提供。

我更喜欢将事件发布到事件总线的想法,而不是使用 Observable.FromEventPattern 随处使用事件处理程序,因为其中一些事件有时仅由订阅者记录而不执行。

这是显示我正在尝试做的事情的片段。

 public interface IEvent { } // marker interface

 public class BarcodeReaderEvent : EventArgs, IEvent
 { }

 public class MouseEvent : EventArgs, IEvent
 { }

 public class MyEventBus
 {
     private static IObservable<IEvent> eventBus = ??

     public void Post<IEvent>(IEvent theEvent)
     {
       // What goes here? 
     }

     public IDisposable Subscribe()
     {
         return ??
     }
 }
Run Code Online (Sandbox Code Playgroud)

Lee*_*ell 5

主题的使用与事件总线的使用一样不推荐。如果您决定拥有一个供每个人发布和收听的单一点,那么也可以全力以赴并使用一个主题。

正如其他帖子中所建议的,标准建议是拥有公开领域特定事件的专用资源/服务。而不是拥有一个通用的事件总线/事件聚合器(IMO 反模式),每个客户端都必须过滤掉他们希望发布的消息。他们应该只订阅专用端点。