2011-08-24 53 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容器中?如果你可以提供更多的代碼(你的服務類的例子,以及消息發佈到/訂閱的地方),這將是很好的