|
MEF(Managed Extensibility Framework)是.NET Framework 4.0一個(gè)重要的庫(kù),Visual Studio 2010 Code Editor的擴(kuò)展支持也是基于MEF構(gòu)建的。MEF的目標(biāo)是簡(jiǎn)化創(chuàng)建可擴(kuò)展的應(yīng)用程序,其核心類是ComposablePart,即具有組合能力的組件,每一個(gè)稱為ComposablePart(中文可為可組合構(gòu)件,不過下文一直采用英文來表示,這樣比較貼切)的組件可以組合(稱為Import)其它組件的功能(其它組件通過聲明Export提供功能)并且它也可以通過定義Export將其功能暴露給其它組件。
ComposablePart通過組件目錄(ComposablePartCatalog)來搜索發(fā)現(xiàn)需要的功能,組件目錄可以是一個(gè)物理文件目錄、網(wǎng)絡(luò)存儲(chǔ)等。每一個(gè)ComposablePart還具備動(dòng)態(tài)組合的能力,在必要的情況下可以重新組合功能。本文將采用自底向上的思路體驗(yàn)一下MEF的設(shè)計(jì)思想。
1、無廢話MEF
MEF的核心是可組合組件ComposablePart,它由ComposablePartDefintion來描述和創(chuàng)建。每一個(gè)可組合組件通過定義ExportDefintion向其它組件提供功能,通過ImportDefinition引用其它組件的功能,通過Metadata來描述組件自身的信息。在創(chuàng)建一個(gè)ComposablePart組件后,通過在組件目錄(ComposableCatalog)搜索需要的功能實(shí)現(xiàn)組件組合。
2、典型的MEF組合過程
(1)創(chuàng)建組件目錄(如AssemblyCatalog)
(2)創(chuàng)建組合容器CompositionContainer,組件容器通過組件目錄搜索組件的定義
(3)創(chuàng)建一個(gè)組件
(4)從組件容器獲取其它組件功能的定義,然后執(zhí)行匹配組合
示例代碼如下:
1. var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); //創(chuàng)建一個(gè)程序集目錄,用于從一個(gè)程序集獲取所有的組件定義
2. var container = new CompositionContainer(catalog); //創(chuàng)建一個(gè)組合容器
3. var composablePart = new MyComponent();
4. container.ComposeParts(composablePart); //執(zhí)行組合,從容器中獲取ExportDefinition并創(chuàng)建實(shí)例組合在一起
5. // composablePart組合完成以供使用
NET技術(shù):MEF——.NET中值得體驗(yàn)的精妙設(shè)計(jì),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。