我已经使用EventAggregator
中的Caliburn.Micro
几周了,真的很享受。我现在遇到的问题是我的服务处理3种类型的消息。如果每种消息类型都需要不同的依赖关系,我只能在构造函数中注入至少3个依赖项来处理消息。我希望我的服务处理消息的唯一时间就是说我需要更改UI的状态。
理想情况下,我希望每个处理程序都是它自己的类。但是,它看起来不像EventAggregator
提供的Caliburn.Micro
创建处理程序类的实例。这样,如果每个消息处理程序需要不同的依赖关系,那么它就不会打扰我的核心服务。
使用Caliburn.Micro
提供的IHandle<T>
或ConsumerOf<T>
之类的相同界面是否有替代的轻量级?由于所有消息都将在应用程序内完成,因此我不需要完整的服务总线。
答案 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容器中?如果您可以提供更多代码(服务类的示例,以及消息发布到/订阅的位置),这将是非常好的