我試圖從其他帖子尋找這個,但無法找到答案,所以創建一個新的問題。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有沒有辦法做到這一點?我該如何處理這種情況? 我想創建空的虛擬存根替代,但真的是每個人都做的?
謝謝!
美...... Thx @Porges – jaxxbo