在这种情况下使用什么:services或EventAggregator

时间:2012-06-06 07:20:04

标签: .net silverlight caliburn.micro infrastructure

我在模块化的Silverlight应用程序中偶然发现了这种特殊情况。

我需要从其中一个应用程序屏幕填充上下文菜单,问题是多个模块可能想在这里添加菜单条目。

我们提出的解决方案是:

  • 使用事件聚合器并发布ContextMenuLoadEvent,模块侦听该事件并在上下文菜单中添加菜单条目
  • 使用IOC容器并从模块注册IPopulateContextMenu服务,然后在屏幕上获取所有IPopulateContextMenu服务并在其上调用Populate。

您认为最好的方法是什么?为什么?

谢谢,

1 个答案:

答案 0 :(得分:2)

我认为第二种方法更接近应该采取的方式。您不希望应用程序shell告诉模块存在上下文菜单。如果您想重新构想UI并使用不同的控件,该怎么办?您必须更改消息类型以及订阅该消息的所有模块。

相反,例如,使用MEF,您可以拥有一个IContextOptions接口或类似的东西,它有一个方法来检索上下文选项的集合。在MEF发现实现此接口的每个模块之后,您可以依次调用每个模块上的方法来填充上下文菜单。