MEF 編程指南(十):重組

有些應用程序被設計成在運行時動態地改變。例如,一個新的擴展可能被下載,或者其餘緣由變得不可用。MEF 依靠咱們稱之爲重組(Composition)的技術處理,在初始化組合之後改變導入值的場景。數組

 
導入能夠經過 [System.ComponentModel.Composition.ImportAttribute] 使用 Allowrecompostion 屬性通知 MEF 支持重組。參考下面的代碼:
 
[Export]
public class HttpServerHealthMonitor
{
    [ImportMany(AllowRecomposition=true)]
    public IMessageSender[] Senders { get; set; }
}
 
這告訴 MEF 準備處理重組,若是 IMessageSender 的可用性實現發生變化(要麼是一個導入變得可用,要麼是一個導入變得不可用),該集合應該改變以反應它。一旦部件選擇重組,不管什麼時候改變在目錄中改變可用的實現都會收到通知,或者即便實例已經從容器手動添加/移除。
 
 
重組的注意事項(Caveats of Recompostion)
  • 當重組發生的時候,將會用新的實例替換集合中的實例 / 數組,不會更新已經存在的實例。在上例中,若是一個新的 IMessageSender 出現,Sender 將會徹底被替換爲一個新的數組。這是爲了更好的知足線程安全。
  • 重組支持幾乎全部類型的導入:字段、屬性和集合,可是不支持構造器參數。
  • 若是類型實現了 [System.ComponentModel.Compostion.IPartImportsSatisfiedNotification] 接口,每當發生重組 ImportCompleted 也將會被調用。
 
重組與 Silverlight
 
Silverlight 中重組遵循一個特殊的規則用以支持應用程序分離。獲取更多請參考  DeploymentCatalog 主題。 
 
 
原文地址:
相關文章
相關標籤/搜索