2011-02-10 28 views
1

我想從我的ERP應用程序中公開一些方法(或接口),我的客戶想要添加自己的模塊來實現某些功能。例如,我們可以將自己的加載項模塊寫入Visual Studio。如何允許外部加載項與.net 3.0應用程序輕鬆接口?

請讓我知道如何做到這一點。

+0

做一個谷歌插件架構(通常被歸類爲依賴反演原則的實現之一)。 – StuartLC 2011-02-10 10:59:45

回答

0

我完全同意Rob的看法,但讓我稍微擴展Rob的答案。

  1. MEF非常沉重且冗長。我的意思是你必須實現許多來自MEF接口的特殊類,並且在大多數情況下,它們只是接口的標準實現,沒有特殊的邏輯。所以如果你不需要所有這些繁重的功能,並想要一些輕量級的解決方案 - 在Rob的答案中實現你自己的以下步驟。 我講的是以前的MEF版本,我不知道上一個版本是否比以前更方便使用。

  2. 如果您決定實施自己的插件架構,我強烈建議您考慮使用Microsoft patterns and practices Unity來實現插件實例化。這將消除有關如何初始化插件的頭痛問題,因爲Unity會照顧插件通過插件構造函數所需的依賴關係。你只需要聲明你想作爲API公開的接口。插件開發人員應該只在插件構造函數中引用這些接口。 Unity非常輕巧,易於使用。

1

我的快速建議:

  1. 揭露一種可能的負荷()鉤接口(一個或多個)/回調
  2. 定義模塊夾
  3. 試圖加載()在模塊夾中的每個組件
  4. Load()編輯完成後,根據需要使用功能。
+0

並使用`CAS(代碼訪問安全)`在加載的程序集周圍創建一個安全的沙箱。 – decyclone 2011-02-10 11:01:05

2

你可能會想看看類似MEFComposite UI Application Block。如果你想「自己動手」,基本是:

  1. 定義一個接口插件可以實現
  2. 指定應用程序將加載項搜索的文件夾
  3. 讓你的應用程序枚舉指定的文件夾和
    1. 使用反射在各組件,以從組件裝載每個類型
    2. 檢查,看是否類型實現你在(1)
    3. 宏指定的接口tantiate實現該接口並調用該接口定義

一個「註冊」的方法每種類型的已經做到了這一點之前,我不能不提醒你,有問題和坑瀑布在獲得這一權利。如果你可以使用像MEF這樣的東西來爲你完成「繁重的工作」,那就去做吧,因爲它讓生活變得更容易 - 要好得多,讓微軟的人爲你編寫你的加載項系統! =)

相關問題