2010-06-01 30 views
6

我一直在尋找爲我的應用程序提供插件支持的不同方法。理想情況下,我將創建一個核心功能,並基於不同的客戶開發不同的插件/插件,例如導入,導出數據等等......通過插件體系結構可擴展C#應用程序的一些方法有哪些?如何在C#中開發基於動態插件的功能

讓我們來舉個例子。如果我們有一個由主菜單(文件,編輯,視圖等)和TreeView組成的程序,該程序顯示按製造商分組的不同品牌的汽車(目前爲福特,通用汽車)。右鍵單擊汽車會顯示一個上下文菜單,唯一的選項是「刪除汽車」。

如何開發應用程序,以便可以部署插件,以便您可以讓一位客戶在TreeView中看到一個新品牌,讓我們說本田,並擴大汽車上下文菜單,以便他們現在可以'畫一輛車'?

在Eclipse/RCP開發中,這很容易通過擴展點和插件來處理。 C#如何處理它?我一直在研究開發自己的插件架構並閱讀MEF。

回答

10

MEF將是一個良好的開端。

格倫·布洛克的文章Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework提供了一個很好的概述。

BTW,不要被標題所迷惑 - 你也可以得到MEF對.NET 3.5 SP1。

+0

我看過一些這表明使用裝載組件,catelogs MEF視頻和容器,但是我還沒有完全理解MEF如何幫助您部署修改你的主菜單或上下文菜單中的一個插件給予控制。我想我錯過了視頻描繪的最後一步,並允許我的應用程序響應插件的呈現。例如,添加一個新的菜單按鈕到主菜單。 – Matthew 2010-06-01 14:45:43

+0

如果您使用MVVM(http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx),應該會更容易弄清楚。這將使您能夠將Menus和MenuItems綁定到基礎(可插入)對象模型。 – 2010-06-01 14:57:50

1

Visual Studio 2010中使用MEF,所以我認爲它是一個安全的賭注,這是走在MS的首選方式。 System.Addin總是顯得有些沉重,但如果您需要插件來始終工作並且您的代碼庫不斷髮展,那麼它可能會是更好的選擇。

如果你關心隔離加載項,你應該閱讀的AppDomain起來。我有一個演示項目,我可以幫助您瞭解如何處理isolating assemblies within an AppDomain here,您可能會感興趣。有關隔離的簡單事實:只有你的類型應該跨越邊界,這些類型應該被封閉,從跨域事件處理中運行尖叫,並且插件永遠不應該擴展MarshallByRefObject。

相關問題