首先,最基本的還是先要知道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.componentmodel.composition.dll,先要有乙個宿主,只需要建立乙個組合容器物件(compositioncontainer)的例項,然後將需要組合的部件(parts)和當前宿主程式新增到容器中即可: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 }}
}
var catalog = new然後分別在兩個類中加入[import]和[export]即可,匯入和匯出有許多種,譬如如果需要匯入多個類的東西的話還需要[importmany]等操作:assemblycatalog(assembly.getexecutingassembly());
var container = new
compositioncontainer(catalog);
container.composeparts(
this);
view code
usingsystem;
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....