轻量级消息库?

时间:2011-08-24 12:57:57

标签: c# caliburn.micro

我已经使用EventAggregator中的Caliburn.Micro几周了,真的很享受。我现在遇到的问题是我的服务处理3种类型的消息。如果每种消息类型都需要不同的依赖关系,我只能在构造函数中注入至少3个依赖项来处理消息。我希望我的服务处理消息的唯一时间就是说我需要更改UI的状态。

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

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

2 个答案:

答案 0 :(得分:1)

我建议您查看MVVM Light's Messenger class

例如,而不是

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( ... ) );

答案 1 :(得分:1)

由哪个类实现IHandle取决于你。您可以选择在单独的类(例如MessageType1Handler,MessageType2Handler等)中执行此操作,并将其作为单例添加到DI容器中?如果您可以提供更多代码(服务类的示例,以及消息发布到/订阅的位置),这将是非常好的