【问题标题】:Communicating between MEF objectsMEF 对象之间的通信
【发布时间】:2013-02-06 11:55:24
【问题描述】:

我正在构建一个工作台/IDE 风格的应用程序,它使用 MEF 在启动时定位工具并将其加载到工作台中。

我正在使用 MVVM Light 来构建工作台和单独的工具。我现在有一点,我希望工具能够相互通信以及工作台。

我不是说直接交流,更像是“嘿,我这里有一些数据,如果有人感兴趣的话”,感兴趣的工具可以获取数据。

这看起来很像 C# 事件,我知道我可以从我的工具中导出一个定义事件的接口,但我也想知道使用 MVVM Light messenger 来提供通信。

我在这里看到人们使用 Prism 的 EventAggregator 来做同样的事情,因为 MVVM Light 的信使大致类似,我想我可以使用它。

我真的在寻求建议,有没有人使用 MEF 的信使 - MEF 对象,你会提倡它而不是普通的旧 C# 事件。

【问题讨论】:

    标签: mvvm mef mvvm-light


    【解决方案1】:

    您在这里看到的是中介者模式。您可以使用普通的旧 C# 事件来做同样的事情......但如果做对了,您很可能最终会实现自己的 pub/sub 模式。如果你要这样做,为什么要重新发明轮子?

    我喜欢使用 prism 的 EventAggregator,因为它是注入 MEF 的 Prism 框架的一部分。我使用了 Prism 的许多其他东西,所以很高兴能“免费”获得它。它还促进了与您的组件的松散耦合,并且与所有好的中介实现一样,它是使用弱事件模式实现的,这可以防止您在销毁已订阅事件的对象时需要避免的内存问题。

    对于它的价值,我曾经使用过 MVVM Light,但我发现 Prism 是一个更成熟的框架,有更好的文档、示例和更大的用户群可供学习。这只是我的观点——我认识很多喜欢 MVVM Light 的人。和他们一起玩,然后选择一个让你开心的:)

    【讨论】:

    • 感谢您的回答@Nicros,我最终使用了 MVVM Light 的信使。稍后我会看看 Prism,但我有技术/概念证明来提供 ATM,所以我有点赶时间,干杯
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2019-03-13
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多