MEF 程式設計指南(四) 宣告匯入

2022-01-21 19:19:14 字數 2089 閱讀 3498

組合部件通過 [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 屬性。

public

class

notifier

public

void notify(string

message)

}}

ipartimportssatisfiednotification 介面

某些情況下,在 mef 對於類的例項的匯入過程完成時候獲得通知是非常重要的。如果要獲得通知,實現 [system.componentmodel.composition.ipartimportssatisfiednotification] 介面。這個介面僅有乙個方法:在類例項結合完成時候,onimportssatisfied 被呼叫。

public

void

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 節中看到的函式式程式設計的定義。但宣告式程式設計是更為一般的概念,可以使用不同技術來實現 函式式程式設計只是實現這一目標的一種方法。我們看乙個演示,如何用...