MEF 編程指南(七):使用目錄

目錄(Catalogs)編程

 
MEF 特性編程模型的核心價值,擁有經過目錄動態地發現部件的能力。目錄容許應用程序輕鬆地使用那些經過 Export Attribute 註冊自身的導出。下面列出 MEF 提供的目錄。 
 
 
程序集目錄(Assembly Catalog)
 
爲了發現給定程序集全部導出,須要使用 [System.ComponentModel.Composition.Hosting.AssemblyCatalog]。
 
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
 
文件目錄(Directory Catalog)
 
爲了發現目錄中全部程序集的全部導出,須要使用 [System.ComponentModel.Composition.Hosting.DirectoryCatalog]。
 
            var catalog = new DirectoryCatalog("Extensions"); 

若是使用相對目錄,這就相對於當前 AppDomain 的根目錄。

DirectoryCatalog 會一次性掃描目錄,可是在目錄有變更時候不會自動刷新。然而,你能夠實現本身的掃描機制,調用 Catalog 的 Refresh() 方法進行掃描。一旦從新掃描(Rescans),重組(Recomposition)就會發生。
 
            var catalog = new DirectoryCatalog("Extensions");
            // 實現掃描的邏輯
            catalog.Refresh();

 

注意: Silverlight 不支持  DirectoryCatalog。 
 
 
彙集目錄(Aggregate Catalog)
 
 
當程序集目錄和文件目錄不能獨自地知足要求或者是須要合併目錄,須要使用 [System.ComponentModel.Composition.Hosting.AggregateCatalog]。AggregateCatalog 組合多個目錄到單一的目錄。一種常見的模式是:不只添加當前執行的程序集,並且添加三方擴展的文件目錄。你能夠傳遞 Catalogs 集合到 AggregateCatalog 構造器,或者直接添加 Catalogs 集合,例如:catalog.Catalogs.Add(...)
 
            var catalog = new AggregateCatalog(
                new AssemblyCatalog(Assembly.GetExecutingAssembly()),
                new DirectoryCatalog("Extensions")); 
 
類型目錄(Type Catalog)
 
爲了發現特定類型集合的全部導出,使用 [System.ComponentModel.Composition.Hosting.TypeCatalog]。
 
 
    var catalog = new TypeCatalog(typeof(type1), typeof(type2), ...);

 

發佈目錄(DeploymentCatalog) - 適用於 Silverlight
 
Sliverlight 中的 MEF 包含 DeploymentCatalog 用於動態地下載遠程的 XAPs。更多參考  DeploymentCatalog 章節。
 
 
爲容器(Container)使用目錄(Catalog)
 
 
爲容器使用目錄,簡單地把目錄傳遞給容器的構造器。
 
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
            var container = new CompositionContainer(catalog);

 

原文:
相關文章
相關標籤/搜索