MEF簡單學習筆記

2022-09-17 10:45:10 字數 2384 閱讀 2862

首先,最基本的還是先要知道mef是撒,他是幹嘛用的:

(1)mef:全稱managed extensibility framework(託管可擴充套件框架)。

(2)msdn上說明:managed extensibility framework 或 mef 是乙個用於建立可擴充套件的輕型應用程式的庫。 應用程式開發人員可利用該庫發現並使用擴充套件,而無需進行配置。 擴充套件開發人員還可以利用該庫輕鬆地封裝**,避免生成脆弱的硬依賴項。 通過 mef,不僅可以在應用程式內重用擴充套件,還可以在應用程式之間重用擴充套件。

(3)工作原理:(這個我看別人的複製黏貼了)

export(匯出): 「export」也就是我們常說的元件或者模組或者服務,它是部件向容器中的其他部件提供的乙個值、功能或服務等;

import(匯入): "import」,既擴充套件點,是元件,服務等接入系統的視窗,是部件向要通過可用匯出滿足的容器提出的要求,mef 支援若干匯入型別,其中包括動態匯入、延遲匯入、必備匯入和可選匯入;

contract(協定):是export和import的一種約定,一種協議,只有contract相匹配的import和export部件才能組裝成功;

catalog(目錄):為了發現可用於組合容器的部件,組合容器將使用「catalog」。

目錄是乙個物件,通過它發現可用部件,

mef 提供了用於從提供的型別、程式集或磁碟路徑建立catalog。

compose(組合):在mef中,容器將匯入與匯出匹配的這一過程我們稱之為組合,部件由 mef 組合,mef 將部件例項化,然後使匯出程式與匯入程式相匹配。

先弄乙個最簡單的helloworld例子來試一下:

view code

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.componentmodel.composition;

using

system.reflection;

using

system.componentmodel.composition.hosting;

namespace

hellomef

static

void main(string

args)

private

void

run()

}public

class

******hello }}

}

上面這個是普通的提取字串,但是這樣就緊耦合了。要把耦合給去掉,先新增乙個引用:system.componentmodel.composition.dll,先要有乙個宿主,只需要建立乙個組合容器物件(compositioncontainer)的例項,然後將需要組合的部件(parts)和當前宿主程式新增到容器中即可:

var catalog = new

assemblycatalog(assembly.getexecutingassembly());

var container = new

compositioncontainer(catalog);

container.composeparts(

this);

然後分別在兩個類中加入[import]和[export]即可,匯入和匯出有許多種,譬如如果需要匯入多個類的東西的話還需要[importmany]等操作:

view code

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.componentmodel.composition;

using

system.reflection;

using

system.componentmodel.composition.hosting;

namespace

hellomef

static

void main(string

args)

private

void

run()

console.readkey();}}

public

class

******hello }}

public

class

helloagain }}

}

這只是乙個最簡單的例子。其他的容我再深入的研究下~

MEF學習小結 z

mef,全稱是managed extensibility framework。它是.net framework4.0的乙個類庫,其主要目的是為了建立可擴充套件的應用程式。按照官方說法就是 用於簡化在部署後可由第三方進行擴充套件的可組合系統的設 計。mef 可使您的應用程式具有開放性,從而允許應用程式...

MEF學習筆記(4) 宣告匯入

組成部件宣告匯入 system.componentmodel.composition.importattribute 特性。跟匯出類似,有幾個不同的方法即是通過字段,屬性和建構函式。屬性匯入 為了匯入乙個屬性值,用 system.componentmodel.composition.importat...

MEF學習筆記(2) 定義組成部件和契約

組成部件 乙個組成部件是mef裡的乙個組成單位。組成部件給其它需要的組成部件匯出服務,和從其它組成部件匯入服務。在mef的設計模型裡,組成部件屬於用system.componentmodel.composition.import和 system.componentmodel.composition....