在MEF对象之间进行通信

时间:2013-02-06 11:55:25

标签: mvvm mef mvvm-light

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

我正在使用MVVM Light来构建工作台和单独的工具。我现在有一个观点,我希望工具能够彼此和工作台进行通信。

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

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

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

我真的是在接受建议后,有没有人使用过MEF-MEF对象的信使,你是否会在普通的旧C#事件中提倡它。

1 个答案:

答案 0 :(得分:0)

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

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

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