我试图从其他帖子寻找这个,但无法找到答案,所以创建一个新的问题。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