MEF 編程指南(十一):查詢 CompositionContainer

CompositionContainer 公開了一部分獲取導出、導出對象以及二者集合的重載。ide

 
在這些方法重載中,你應該遵循下面的共享行爲準則 - 除非特別說明。
 
  • 當請求單一實例的時候,若是沒發現任何導入,將會拋出異常。
  • 當請求單一實例的時候,若是發現不止一個導入,將會拋出異常。
 
GetExportedValue
 
在下面的代碼片斷裏,咱們請求 Root(契約)實例的實例。
 
var container = new CompositionContainer(new AssemblyCatalog(typeof(Program).Assembly));

Root partInstance = container.GetExportedValue<Root>();

 

若是有一個不一樣合同名稱的導出,你須要使用一個不一樣的重載:
 
[Export("my_contract_name")]
public class Root
{
}
var container = new CompositionContainer(new AssemblyCatalog(typeof(Program).Assembly));
Root partInstance = container.GetExportedValue<Root>("my_contract_name");

 

GetExport
 
GetExport 檢索延遲引用實例化導出。訪問導出的 Value 屬性將會迫使導出實例的建立。屢次調用導出的 Value 屬性只會返回同一實例,不管部件擁有 Shared 生命期仍是 Non-Shared 生命期。
 
Lazy<Root> export = container.GetExport<Root>();
var root = export.Value; //create the instance.

 

GetExportedValueOrDefault
 
GetExportedValueOrDefault 和 GetExportedValue 的區別在於 GetExportedValueOrDefault 在沒有任何匹配的狀況下並不會拋出異常。
 
    var root = container.GetExportedValueOrDefault<Root>(); // may return null
 
原文地址:
相關文章
相關標籤/搜索