我使用Caliburn.Micro的EventAggregator已经有几个星期了,真的很享受。我现在遇到的问题是,我的服务处理3种类型的消息。如果每种消息类型都需要不同的依赖项,我就不得不在构造函数中注入至少3个依赖项来处理消息。只有当我需要更改UI的状态时,我才会希望我的服务处理消息。
理想情况下,我希望每个处理程序都是自己的类。但是,看起来Caliburn.Micro提供的EventAggregator并不能创建处理程序类的实例。这样,如果每个消息处理程序需要不同的依赖关系,那么它就不会干扰我的核心服务。
有没有替代的轻量级接口,可以使用Caliburn.Micro提供的IHandle<T>接口,或者像ConsumerOf<T>这样的接口?由于所有消息传递都将在应用程序中完成,因此我不需要完全成熟的服务总线。
发布于 2011-08-24 21:08:23
我会推荐你看看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( ... ) );发布于 2011-09-02 11:33:30
哪一个类实现IHandle由您决定。您可以选择在单独的类(例如MessageType1Handler、MessageType2Handler等)中执行此操作。并将其作为单例添加到DI容器中?如果您能提供更多的代码(服务类的示例,以及消息发布到/订阅的位置),那就太好了
https://stackoverflow.com/questions/7175801
复制相似问题