2013-10-17 41 views
3

我試圖從其他帖子尋找這個,但無法找到答案,所以創建一個新的問題。MEF - 每個導入都需要導出嗎?

我正在構建一個ETL系統。

現在我有具有以下進口類:

 [Import] 
     public IDataExtractor DataExtractor { get; set; } 
     [Import] 
     public IDataTransformer DataTransformer { get; set; } 
     [Import] 
     public IDataValidator DataValidator { get; set; } 
     [Import] 
     public IDataPublisher DataPublisher { get; set; } 
     [Import] 
     public IDataUpdater DataUpdater { get; set; } 

我Program.cs中有組成如下代碼:

  var catalog = new AggregateCatalog(); 
      if (!string.IsNullOrEmpty(ConfigKeys["Extractor"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Extractor"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Transformer"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Transformer"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Validator"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Validator"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Publisher"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Publisher"])); 
      if (!string.IsNullOrEmpty(ConfigKeys["Updater"])) 
       catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Updater"])); 
      var container = new CompositionContainer(catalog); 
      container.ComposeParts(this); 

ConfigKeys []是我的配置管理系統,我可以指定,每個提取器,變壓器,驗證器等DLL的路徑。

完整的過程我s:提取,轉換,驗證,發佈,更新。

某些時候,所有需要的是要執行的3個函數:提取,轉換,發佈。 所以如果配置系統,沒有一個Validator DLL的路徑,我不想要一個IDataValidator接口的實例。 但是,如果我指定一個空白,我會在構圖過程中出錯。

錯誤:組成保持不變。由於以下錯誤,更改被拒絕:組合產生了多個組合錯誤,其中有4個根本原因。根源在下面提供。查看CompositionException.Errors屬性以獲取更多詳細信息。 「構圖產生了單個構圖錯誤,其根本原因在下面提供,請查看CompositionException.Errors屬性以獲取更多詳細信息。\ r \ n \ r \ n1)找不到與約束匹配的導出:\ n \ tContractName \ tCTP.DCU.Models.Interfaces.IDataTransformer \ n \ tRequiredTypeIdentity \ tCTP.DCU.Models.Interfaces.IDataTransformer \ r \ n「

我的問題是:對於每個IMPORT,我可能沒有EXPORT,我想要妥善處理。 MEF有沒有辦法做到這一點?我該如何處理這種情況? 我想創建空的虛擬存根替代,但真的是每個人都做的?

謝謝!

回答

9

如果你想打一個[Import]可選的,你可以使用AllowDefault

[Import(AllowDefault = true)] 
public IDataTransformer DataTransformer { get; set; } 

如果沒有匹配[Export],則DataTransformer財產將留給null

+0

美...... Thx @Porges – jaxxbo