gpt4 book ai didi

c# - 有没有办法使用 MEF 为导入指定元数据?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:55 25 4
gpt4 key购买 nike

我正在尝试编写一个 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 本身的权限,但它似乎没有。

如果按照我描述的方式这根本不可能,那么在满足导入时,有谁能想到提供和访问导入元数据的替代方法吗?

最佳答案

如果您的目标是 .NET 4.5,则可以使用 Microsoft.Composition NuGet package而不是“开箱即用”的 MEF 版本。这有一些功能上的差异,不是直接替代品,但一个附加功能是 ImportMetadataConstraint 属性:

public class TestImportClass1
{
[Import(typeof(ITestExport))]
[ImportMetadataConstraint("MetadataStr", "A")]
[ImportMetadataConstraint("MetadataInt", 2)]
public ITestExport MyExportedValue { get; set; }
}

这也适用于自定义元数据属性,因此您也可以这样写:

public class TestImportClass1
{
[Import(typeof(ITestExport))]
[TestExportMetadata(MetadataStr = "A", MetadataInt = 2)]
public ITestExport MyExportedValue { get; set; }
}

(请注意,属性需要公开才能在此处用作导入。)

关于c# - 有没有办法使用 MEF 为导入指定元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12039236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com