var catalog = new assemblycatalog(typeof(program).assembly);
var parent = new
compositioncontainer(catalog);
var filteredcat = new
filteredcatalog(catalog,
def => def.metadata.containskey(compositionconstants.partcreationpolicymetadataname) &&((creationpolicy)def.metadata[compositionconstants.partcreationpolicymetadataname]) ==creationpolicy.nonshared);
var child = new
compositioncontainer(filteredcat, parent);
var root = child.getexportedobject();
child.dispose();
如果 creationpolicy 作為標準選擇部件不能滿足需求,你可能想到使用 [system.componentmodel.composition.partmetadataattribute] 替代。它允許為部件附加元資料,因此可以使用它構建過濾表示式。下面的示例就是 partmetadata 特性的應用:
[partmetadata("scope
", "
webrequest
"), export]
public
class
homecontroller : controller
這允許你建立侷限於 web 請求(邏輯)部件的子容器。請注意:範圍邊界取決於你的定義,換句話說,mef 不知道 "webrequest"是什麼,所以你不得不建立一些基礎**來在每次web 請求時建立/**(create/dispose)容器。
var catalog = new assemblycatalog(typeof(program).assembly);
var parent = new
compositioncontainer(catalog);
var filteredcat = new
filteredcatalog(catalog,
def => def.metadata.containskey("
scope
") &&def.metadata[
"scope
"].tostring() == "
webrequest");
var perrequest = new
compositioncontainer(filteredcat, parent);
var controller = perrequest.getexportedobject();
perrequest.dispose();
注意:我們並沒有提供 filteredcatalog 類。下面演示了如何構建乙個簡單的實現。
usingsystem;
using
system.componentmodel.composition.primitives;
using
system.componentmodel.composition.hosting;
using
system.linq;
using
system.linq.expressions;
public
class
filteredcatalog : composablepartcatalog, inotifycomposablepartcatalogchanged
public
override iqueryableparts
}public
event eventhandlerchanged
remove
}public
event eventhandlerchanging
remove
}}
MEF 程式設計指南(七) 使用目錄
目錄 catalogs mef 特性程式設計模型的核心價值,擁有通過目錄動態地發現部件的能力。目錄允許應用程式輕鬆地使用那些通過 export attribute 註冊自身的匯出。下面列出 mef 提供的目錄。程式集目錄 assembly catalog 為了發現給定程式集所有匯出,需要使用 sys...
《MEF程式設計指南》博文彙總
在mef之前,人們已經提出了許多依賴注入框架來解決應用的擴充套件性問題,比如osgi 實現以spring 等等。在 microsoft 的平台上,net framework 自身內部包含元件模型和 system.addin。同時存在若干種開源解決方案,包括 sharpdevelop 的 soda 體...
MEF程式設計指南(前兩節)
mef程式設計指南 前兩節 在應用程式中使用mef 在應用程式中使用mef需要建立乙個compositioncontainer的例項,向其中新增可組合的部件,將宿主應用包含進去然後組合。以下是使用mef需要用到的步驟 1 建立乙個宿主類。在接下來的示例中,我們將會使用乙個控制台應用,所以宿主也就是p...