組合部件通過 [system.componentmodel.composition.importattribute] 特性宣告匯入。類似於匯出,也有幾種不同的方法宣告匯入,即通過:字段(fields)、屬性(properties)和構造器引數(constructor parameters)。
屬性匯入(property imports)
為了向屬性匯入值,使用 [system.componentmodel.composion.importattribute] 特性標識。如下例中匯入 imessagesender。
[import]public imessagesender messagesender
構造器引數(constructor parameters)
也可以通過構造器引數指定匯入。這意味著為每個匯入新增構造器引數,而不必為每個屬性新增匯入。使用構造器引數匯入,遵循以下幾點。
1. 構造器新增 [system.componentmodel.compostition.importingconstructorattribute] 特性 。
2. 為每個匯入新增構造器引數。
例如:在 program 類的構造器中匯入 messagesender
[importingconstructor]public
program(imessagesender messagesender)
引數匯入(parameter imports)
有幾種不同的方式在構造器上定義匯入。
1. 隱式匯入 - 預設情況下,容器會使用引數型別確認契約。例如:下面的**,將使用 imessagesender 契約。
2. 顯示匯入 - 如果想指定匯入契約,在相應引數上新增 [system.componentmodel.composition.importattribute] 特性。
字段匯入(field imports)
mef 也支援直接為字段匯入值。
[import]private imessagesender _messagesender;
注意:在完全信任(full trust)的時候支援
匯入或者匯出私有成員(字段、屬性和方法),但是部分信任(medium/partial)可能會出問題。
預設匯入(optional imports)
mef 允許指定預設匯入。當啟用它,如果型別可用容器會提供匯出,否則將匯入設定為 default。為了得到乙個預設匯入,在匯入上設定 allowdefault=true。如下例:
ordercontroller 預設匯入乙個 logger。如果 logger 不存在,會設定 private _logger 欄位為 defaultlogger 例項,否則使用匯入的 logger。
匯入集合(importing collections)
除了單一匯入以外,也可使用 importmany 特性匯入集合。這意味著所有特定的契約例項都會被容器匯入。
mef 部件也可以支援重排(recomposition)。這意味著容器中新的匯出變得可用,集合會自動更新為新的設定。例如:下面的 notifier 類匯出 imessagesender 集合。這意味著如果容器中有3個可用的 imessagesender 匯出,在組合時候會被推送到 senders 屬性。
publicclass
notifier
public
void notify(string
message)
}}
ipartimportssatisfiednotification 介面
某些情況下,在 mef 對於類的例項的匯入過程完成時候獲得通知是非常重要的。如果要獲得通知,實現 [system.componentmodel.composition.ipartimportssatisfiednotification] 介面。這個介面僅有乙個方法:在類例項結合完成時候,onimportssatisfied 被呼叫。
publicvoid
onimportssatisfied()
MEF學習筆記(4) 宣告匯入
組成部件宣告匯入 system.componentmodel.composition.importattribute 特性。跟匯出類似,有幾個不同的方法即是通過字段,屬性和建構函式。屬性匯入 為了匯入乙個屬性值,用 system.componentmodel.composition.importat...
spring(四)宣告式事務控制
1.3 transactionstatus 1.4 知識要點 2 基於 xml 的宣告式事務控制 3 基於註解的宣告式事務控制 platformtransactionmanager 介面是 spring 的事務管理器,它裡面提供了我們常用的操作事務的方法。注意 platformtransaction...
1 3 2 宣告式程式設計風格
1.3.2 宣告式程式設計風格 用宣告式程式設計風格,我們表達的程式邏輯無需說明執行細節。這個描述聽起來有些耳熟,因為它十分類似於我們在 1.1 節中看到的函式式程式設計的定義。但宣告式程式設計是更為一般的概念,可以使用不同技術來實現 函式式程式設計只是實現這一目標的一種方法。我們看乙個演示,如何用...