我正在尝试编写一个 ExportProvider,它根据在导出和导入上找到的元数据有条件地导出。导出元数据很简单:
[Export(typeof(ITestExport))]
[TestExportMetadata(MetadataStr = "A", MetadataInt = 2)]
public class TestExportClass1 : ITestExport
{
}
检查导出元数据并提供基于它的导出很简单。我想为进口做的是类似的事情,也许是这样的:
public class TestImportClass1
{
[Import(typeof(ITestExport))]
[TestImportMetadata(MetadataStr = "A", MetadataInt = 2)]
ITestExport MyExportedValue { get; set; }
}
TestImportMetadata 的实际签名在这里并不重要,除了我想为导入提供某种元数据并能够在需要满足该导入时引用它。不幸的是,似乎没有设计等效的过程来将元数据应用于导入,就像导出一样。
ExportProvider 基类提供了抽象方法:
protected abstract IEnumerable<Export> GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition);
我认为提供给此方法的 ImportDefinition 可以让我直接或间接地对我的元数据或至少对 ImportAttribute 本身进行某种访问,但似乎没有。
如果这根本不可能像我描述的那样,那么在满足导入时,谁能想到提供和访问导入元数据的替代方法?