轻量级消息传递库

本文关键字:消息传递库 轻量级 | 更新日期: 2023-09-27 18:06:36

我已经使用Caliburn.MicroEventAggregator几个星期了,真的很喜欢它。我现在遇到的问题是,假设我的服务处理3种类型的消息。如果每种消息类型都需要不同的依赖项,那么我就不得不在构造函数中注入至少3个依赖项来处理消息。我想让我的服务处理消息的唯一情况是当我需要更改UI的状态时。

理想情况下,我希望每个处理程序是它自己的类。然而,Caliburn.Micro提供的EventAggregator看起来并没有创建处理程序类的实例。这样,如果每个消息处理程序需要不同的依赖,那么它就不会打扰我的核心服务。

是否有一个替代轻量级使用相同的接口,Caliburn.Micro提供IHandle<T>,或类似ConsumerOf<T> ?由于所有消息传递都将在应用程序内完成,因此我不需要一个完整的服务总线。

轻量级消息传递库

我建议你看看MVVM Light的Messenger类。

例如,而不是

class MyMessageHandler : IHandle<Message>
{
  void Handle( Message msg )
  {
    //Do something
  }
}

您将执行以下操作

class MyMessageHandler
{
  ctor MyMessageHandler()
  {
    Messager.Default.Register<Message>( this, Handle );
  }
  void Handle( Message msg )
  {
    //Do something
  }
}

任何想要发送消息的类只需调用下面的代码

Messanger.Default.Send( new Message( ... ) );

由您决定由哪个类实现IHandle。你可以选择在单独的类中这样做(例如MessageType1Handler, MessageType2Handler等),并将其作为一个单例添加到你的DI容器?如果您能提供更多的代码(服务类的示例,以及消息被发布到/订阅的位置),那就太好了