2013-01-22 79 views
2

我是插件世界的新手,並且強迫理解mef。 目前我知道我可以從一個特定的文件夾加載插件。 現在我有一些問題:MEF加載和卸載特定插件?

  • 我可以加載一個文件夾中的配置文件中指定的插件(序列化)?
  • 我如何卸載插件?
  • 如何加載最小版本的最小&版本之間的特定版本的插件?
  • 我如何包裝目錄&組成例如如像 「MEF經理」

optionaly:

  • 我如何可以顯示插件的形式?

感謝您的幫助

+0

你真的認爲這個問題呢?嘗試優先考慮並展示一些研究成果,以便人們知道該回答什麼。 – Hannish

+0

不好的問題,但答案真的很方便。我學到了很多東西,所以我向你扔了一個upvote = P。 –

回答

7

我可以加載從作爲一個 configuarations文件(連載)指定的文件夾插件嗎?

是的,您可以使用MEF的DirectoryCatalog類從文件夾加載插件。您將不得不在配置文件中添加自己的部分,併爲插件所在的每個文件夾創建一個DirectoryCatalogUnraveling the Mysteries of .NET 2.0 Configuration包含有關如何使用System.Configuration名稱空間中的類的詳細信息。

我該如何卸載插件?

這取決於你的意思是卸載一個插件。

  • 卸載插件當組件從一個文件夾中移除可使用MEF的進口屬性的AllowRecomposition屬性和用於監測刪除.dll文件並調用DirectoryCatalog.Refresh方法來強制每個插件文件夾中的FileSystemWatcher來完成MEF容器的更新。但請注意,默認情況下,您不能刪除.NET加載的程序集。爲了克服這個.NET支持Shadow Copying。看看Glenn Block的The Way of MEF代碼。 PartUpdatesInPlace就是一個很好的例子。

  • 卸載沒有文件系統的插件是另一回事。你將不得不自己做。通常你需要一個可以隨意卸載插件的插件管理器。

注意,雖然加載的程序集不會只卸載插件。

如何加載插件與特定版本之間的最小& max 版本?

您可以使用MEF的Export Metadata添加插件元數據。然後,您訪問CompisitionContainerGetExports方法,並在訪問實際插件之前檢查元數據。這是基於MEF的插件解決方案的標準程序。還可以看看在MEF2中添加的ExportFactory類,以獲得更好的方法。

我如何包裝目錄&構成例如如像「MEF 經理」

開始通過一個非常簡單的插件管理器類,它提供的基礎(取決於你想要做什麼),並從該建。

如何從插件顯示錶單?

您可以像使用MEF一樣進行操作。例如,你可以添加一個表單屬性到你的插件inteface/base類,並讓每個插件負責創建/處理它。

在你開始做這一切之前,我建議你檢查Prism(複合應用指南)和Smart Client Software Factory。這些是需要極大靈活性的WPF和WinForms應用程序的強大框架。如果你決定檢查他們,我認爲最好的方法是玩弄樣品。

祝你好運