0

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

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

我们提出的2个解决方案是:

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

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

谢谢,

4

1 回答 1

2

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

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

于 2012-06-06T08:11:18.370 回答