版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Managed Extensibility Framework托管可擴(kuò)展性框架秦春林2011-04-28MEFMakesExtensibilityFabulousGlenn Block -MEF產(chǎn)品經(jīng)理一般可擴(kuò)展應(yīng)用程序架構(gòu)App Framework框架設(shè)計(jì)者第三方插件設(shè)計(jì)者模塊設(shè)計(jì)者導(dǎo)航模塊設(shè)計(jì)者RIA Extensions, add-ins, and plugins oh my!Extensibility implantsTurning fat apps into slimmer appsNeedGotImportExportMEF BasicsAn Application is buil
2、t of parts.DemoMEF BasicsExport it.Import it.Compose it.Export it.Widget1Export(typeof(UserControl)public class Widget1 : UserControl public MainPage() InitializeComponent(); public string Message getreturn(string) Button.Content; setButton.Content=value; Export導(dǎo)出部件必須包含公共無(wú)參構(gòu)造函數(shù)Import it.Widget1Expor
3、t(typeof(UserControl)public class Widget1 : UserControlImportpublic string Message getreturn(string) Button.Content; setButton.Content=value; ImportStringImport it.Widget1Export(typeof(UserControl)public class Widget1 : UserControlImport(“HelloMEF.Message”)public string Message getreturn(string) But
4、ton.Content; setButton.Content=value; Import“HelloMEF.Message”Import it.MainPageExport(typeof(UserControl)public class MainPage: UserControlImportMany(typeof(UserControl)public IEnumerable get;set;ImportManyUserControlCompose it.PartIntializer: “Compose yourself”MainPageCompose public MainPage() Ini
5、tializeComponent(); var catalog = new DirectoryCatalog(.); var container = new CompositionContainer(catalog); container.ComposeParts(this); Be different Use metadataWidgetWidgetWhere does the widget go?Export it - MetadataWidget1ExportMetadata(“Location”,Location.Top)Export(typeof(UserControl)public
6、 class Widget1 : UserControlpublic string Message getreturn(string) Button.Content; setButton.Content=value; ExportUserControl Put me in the topImport it - MetadataMainPageExport(typeof(UserControl)public class MainPage: UserControlImportMany(typeof(UserControl)public IEnumerableLazy get;set;ImportM
7、anyUserControlHave it your way! Custom ExportsExport it - MetadataWidget1ExportMetadata(“Location”,Location.Top)Export(typeof(UserControl)public class Widget1 : UserControlpublic string Message getreturn(string) Button.Content; setButton.Content=value; ExportUserControl Put me in the topCustomize it
8、 Custom exportsWidget1Widget(Location=Location.Top)public class Widget1 : UserControlpublic string Message getreturn(string) Button.Content; setButton.Content=value; ExportUserControl Put me in the topDemoMEF and PrismIntroducing MEF-Prism integrationGoal : Enable an existing Prism application to be
9、 further extended through MEFEnabled MEF modules to be added dynamically on the fly.Enable MEF discovered components to be registered in IoC container (Such as Unity). Introducing MEF-Prism integrationPrism application starts and loads up known modules.Introducing MEF-Prism integrationPrism applicat
10、ion can load unknown plugins, by using MEF as an abstraction layer.1. Plugins are located and added to a MEF catalog.ServerIntroducing MEF-Prism integrationPrism application can load unknown plugins, by using MEF as an abstraction layer.2. Plugins register dependencies with current IoC container.Ser
11、verIntroducing MEF-Prism integrationPrism application can load unknown plugins, by using MEF as an abstraction layer.3. Plugins are activated. Dependencies are injected.ServerWhere can I get it?MEF ships in Silverlight 4.0Dynamic XAP support in SL 4.0 ToolkitSilverlight 3.0 support on CodeplexMEF so
12、urce ships under MSPLLearn more:SMEF.CMEFContrib.C Prism/MEF Cross-platform(s)深入深入MEFMEFMEF的幾個(gè)核心概念可組合的部件導(dǎo)出導(dǎo)入約定組合使用MEF的一般步驟添加需要容器創(chuàng)建的約定的導(dǎo)入創(chuàng)建MEF用于發(fā)現(xiàn)部件的目錄創(chuàng)建組合部件實(shí)例的容器通過(guò)對(duì)容器調(diào)用Composeparts方法并傳入具有導(dǎo)入的實(shí)例,來(lái)進(jìn)行組合基元層Primitives編程模型Attributed Model托管層Hosting.NET Composition Architecture基元層-生成部件和編程模型的位置System.Compone
13、ntModel.Composition.Primitives 基元層是MEF的核心和基礎(chǔ)。基元定義部件的抽象表現(xiàn)形式在這個(gè)架構(gòu)中開(kāi)發(fā)者可以使用不同的編程模型來(lái)使用基元,MEF提供一種基于特性編程的編程模型特性化編程模型Attributed Programming ModelSystem.ComponentModel.Composition編程模型定義部件,導(dǎo)入和導(dǎo)出特性化編程模型使用特性(Attribute)根據(jù)契約將一般的.NET對(duì)象標(biāo)記為部件特性化部件編程模型配合托管層進(jìn)行查找部件和組合部件托管層-進(jìn)行組合的位置System.ComponentModel.Composition.Hosti
14、ng托管層提供了很大的靈活性,可配置性和可擴(kuò)展性目錄提供可用導(dǎo)出和導(dǎo)出的部件定義。它們是MEF中用于發(fā)現(xiàn)的主要單元TypeCatalogAssemblyCatalogDirectoryCatalog目錄從ComposablepartCatalog繼承,并且是MEF的擴(kuò)展點(diǎn)。自定義目錄有多種用途: 從提供全新的編程模型到封裝和賽選現(xiàn)有目錄通過(guò)構(gòu)造函數(shù)導(dǎo)入也成為構(gòu)造函數(shù)注入使用導(dǎo)入構(gòu)造函數(shù)時(shí),MEF會(huì)假設(shè)所有參數(shù)都是導(dǎo)入,從而不必使用Import特性構(gòu)造函數(shù)參數(shù)不支持重新組合控制部件創(chuàng)建策略默認(rèn)情況下,容器中的所有部件實(shí)例都是單例,因?yàn)橛稍谌萜髦袑?dǎo)入它們的所有部件共享。如果有時(shí)每個(gè)導(dǎo)入程序都要獲取
15、自己的實(shí)例,可以設(shè)置創(chuàng)建策略CreationPolicy.SharedCreationPolicy.NonSharedCreationPolocy.Any導(dǎo)入延遲導(dǎo)出和訪問(wèn)元數(shù)據(jù)System.Lazy使用該API可延遲實(shí)例的實(shí)例化,直至訪問(wèn)Lazy的Value屬性MEF使用Lazy進(jìn)一步擴(kuò)展Lazy,以允許在不實(shí)例化基礎(chǔ)導(dǎo)出的情況下訪問(wèn)導(dǎo)出元數(shù)據(jù)Tmetadata是元數(shù)據(jù)的視圖類型。元數(shù)據(jù)視圖是接口,用于定義對(duì)應(yīng)所導(dǎo)出元數(shù)據(jù)中的鍵的只讀屬性。訪問(wèn)元數(shù)據(jù)屬性時(shí),MEF將動(dòng)態(tài)實(shí)現(xiàn)Tmetadata,且將基于導(dǎo)出提供的元數(shù)據(jù)來(lái)設(shè)置值重新組合此功能允許部件在系統(tǒng)中出現(xiàn)新的匹配導(dǎo)出時(shí)自動(dòng)更新其導(dǎo)入。重新組合在某些方案中十分有用,例如從遠(yuǎn)程服務(wù)器下載部件時(shí),可以啟動(dòng)多個(gè)可選視圖的下載AllowRecomposition=true進(jìn)行組合時(shí),導(dǎo)入集合將立即替換為包含一組更新過(guò)的新的集合有兩個(gè)目錄支持重新組合:DirectoryCatalog通過(guò)調(diào)用其Refresh方法來(lái)重新組合AggregateCatalog使用Catalogs集合屬性向該目錄添加目錄啟動(dòng)重新組合MEF的世界小到屬性值的注入構(gòu)造函數(shù)參數(shù)的注入服務(wù)的注入大到模塊的集成第三方插件擴(kuò)展MEF提供的是一個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 導(dǎo)游帶團(tuán)勞動(dòng)合同范例
- 義診合作合同范例
- 工地清包工外架合同范例
- 安裝鋁合金護(hù)欄合同模板
- 小區(qū)投放充電樁合同范例
- 辦公標(biāo)簽銷售合同范例范例
- 建筑材料居間協(xié)議合同模板
- 律師審查股權(quán)合同模板
- 寄售車銷售合同模板
- 公墓合作協(xié)議合同范例
- DB13T 5182-2020 濕地修復(fù)工程技術(shù)規(guī)程
- 膿毒癥并膿毒癥休克指南課件
- 學(xué)校安全風(fēng)險(xiǎn)隱患排查臺(tái)賬表
- 邊坡工程支護(hù)設(shè)計(jì)計(jì)算書Word
- GLP-1受體激動(dòng)劑與DPP-4抑制劑幻燈
- 證券投資學(xué)習(xí)題(霍文文)附答案
- 地鐵綜合監(jiān)控施工組織設(shè)計(jì)
- 日用陶瓷項(xiàng)目企劃書(模板參考)
- 專利入池協(xié)議
- 古詩(shī)接龍100首
- 會(huì)計(jì)專業(yè)剖析報(bào)告 - 副本
評(píng)論
0/150
提交評(píng)論