也來學學外掛程式式開發續 利用MEF

2021-09-06 08:20:58 字數 1619 閱讀 6324

mef主要是通過import與export特性來定義匯入與匯出部件。程式在執行的時候會將具有相同介面的匯出的例項化,賦給匯入。

mef程式設計指南一:在應用程式中宿主mef這篇文章有乙個簡單的mef例子,大家可以參考一下。

所以,在這裡,外掛程式就是匯出,我們在程式中要定義具有和外掛程式相同介面的匯入。

但是這裡有乙個問題,一般的匯入與匯出是一對一的,但我們的工具箱中和外掛程式的關係明顯是一對多的怎麼辦?

沒問題,mef對於這種情況可以將匯入宣告為importmany,這樣就支援乙個匯入對應多個匯出了。

關於importmany可參見:

因此這裡,我用importmany來定義乙個集合來儲存外掛程式:

[importmany]

public ienumerableplugins;

我們用反射的時候是將外掛程式放置在乙個固定的目錄中,然後再去掃瞄這個目錄來發現外掛程式,在mef中如何來發現外掛程式呢?

mef提供三種方式發現部件:

assemblycatalog 在當前程式集發現部件。

directorycatalog 在指定的目錄發現部件。

deploymentcatalog 在指定的xap檔案中發現部件(用於silverlight)

可以看到,我們也可以將外掛程式放在統一的目錄讓mef去檢索發現。

使用mef的時候,首先要初始化mef的組合容器物件:compositioncontainer,所以在窗體載入的時候要做好初始化工作。

public

toolbox()

private

compositioncontainer _container;

private

void

init()

catch

(compositionexception compositionexception)

}

接著就是發現外掛程式後的顯示工作了:

private

void toolbox_load(object

sender, eventargs e)

[importmany]

public ienumerableplugins;

public

void

initplugin()

}

我們來新增乙個外掛程式試試。新建乙個類庫專案,再增加乙個window窗體,拉乙個picturebox,顯示一張。主要的工作是我們要定義匯出:export

[export(typeof

(pluginmain.inte***ce.iplugin))]

public

class

}public

system.drawing.image modulepicture}}

將生成的.dll放在plugin目錄中。生成後效果如圖:

參考資料:【.net平台下外掛程式開發】-mef與maf初步調研

《mef程式設計指南》博文彙總

managed extensibility framework (mef)

外掛程式式開發

自己做個筆記 listplugins new list 存放外掛程式的列表 string path dll資料夾路徑 string files 所有的dll陣列 foreach string dllfile in files 遍歷每乙個dll assembly ably assembly.lodef...

c 外掛程式式開發

mef 原文 首先,新建乙個類庫,裡面定義介面,這裡定義兩個方法,乙個有返回值的,乙個無返回值的。using system using system.collections.generic using system.text namespace imsg 將上面的類庫生成imsg.dll,新建乙個類...

外掛程式式開發小記

在做外掛程式開發時,小記一下,用來備忘 1.dev8.2的xtratabcontrol控制項如何獲得當前開啟的子窗體 xtraform frm xtraform xtratabcontrol1.selectedtabpage.controls 0 2.外掛程式開發的底層標準最好是抽象類,這樣擴充套件...