假设我在AssemblyA中定义了一个导出:
[Export(typeof(Foo))]
public class Foo
{
...
}
有没有办法确定Foo的导出来自CompositionContainer中的AssemblyA?
我要做的是,对于任何提供MEF导出的给定程序集,它还必须包含一个特定接口的MEF导出。我希望能够标记任何不符合此规则的程序集。
答案 0 :(得分:2)
在CompositionContainer中无法做到这一点。我建议为每个程序集创建一个AssemblyCatalog,并检查它的任何部件是否具有与所需接口匹配的ExportDefinition。
答案 1 :(得分:1)
您可以使用静态ComposablePartDefinition方法识别ReflectionModelServices.GetPartType的类型和程序集。以下示例创建一个包含容器目录中包含的类型的不同程序集的列表:
var assemblies = container.Catalog.Parts
.Select(part => ReflectionModelServices.GetPartType(part).Value.Assembly)
.Distinct()
.ToList();