2011-08-24 54 views
2

我一直在使用EventAggregatorCaliburn.Micro几个星期,现在真的很享受它。我现在遇到的问题是,我的服务处理3种类型的消息。如果每个消息类型都需要不同的依赖关系,我不得不在我的构造函数中注入至少3个依赖项来处理消息。我希望我的服务处理消息的唯一时间是说我需要更改UI的状态。轻量级消息库?

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

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

回答

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

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