2010-09-07 39 views
0

我有一個插件需要訪問某些信息才能正確填充其GUI元素。但是,這個插件不應該知道所有其他插件,所以我希望它從應用程序請求這些信息。使用接口與MVVM light Messenger進行數據請求

在這樣的情況下,我總是創建一個數據交換接口,然後將這個接口傳遞給插件,以便他們可以在需要時請求數據。不過,我最近開始使用MVVM light toolkit,因爲它有一些很棒的功能,如RelayCommandMessenger。在這種情況下,我完全可以看到使用Messenger - 插件不需要該界面,因爲他們可以簡單地使用Messenger.Default.Send<MyDataRequestMessage>(...)。只要他們註冊接收處理程序,這一切都很好...或者它是什麼?

您會喜歡哪種方法,爲什麼?

回答

1

在插件的情況下,像MVVM Light的使者這樣的聚合器是相當好的;或者,您可以查看MEF(現在是.Net 4的一部分),它還支持自動發現和其他這些不錯的功能,並且可以使用接口。所以答案是這取決於:)就個人而言,我傾向於Messenger,因爲它的簡單性,除非它可能是一個非常大的企業項目。

+0

我目前已經在使用MEF +數據接口。我也喜歡Messenger,因爲它使事情變得簡單,但我只是不夠熟悉,無法立即知道所有潛在的警告。 – Dave 2010-09-07 15:36:52

+0

我不知道任何,我已經在兩個中型項目中使用它,我對結果感到滿意。此外,如果您發現任何缺陷,修改代碼以修復或解決它們很容易:P – 2010-09-08 06:50:47

1

正如Alex所說,MEF就是爲此目的而創建的。如果您需要管理插件,那麼如果您不使用它,您可能最終會重複MEF爲您提供的大量工作。

沒有理由不能同時使用MEF和MVVM Light。您使用MVVM light的使用者從插件與應用程序進行通信的想法非常有趣,我希望它對您有用。但是,請記住,任何插件都可以註冊以接收這些相同的消息,並且最終可能會有一個插件接收另一個插件的消息。這對你來說可能不是問題,但如果你不控制誰寫這些擴展名,那麼你在那裏肯定會有安全漏洞。

祝你好運!

+0

謝謝 - 我在我的應用程序中使用了MEF一段時間,並且我非常喜歡它,並且將它用於一切如果調試部分組成並不那麼痛苦。你應該查看我最近的問題http://stackoverflow.com/questions/3696893/mef-error-was-circular-dependency-and-is-now-something-else,這是直接關係到這個問題。我最終走上了MEF路線,遇到了一個有趣的問題! – Dave 2010-09-13 12:40:18

相關問題