识别可组合零件的装配

时间:2011-02-25 02:08:12

标签: mef

假设我在AssemblyA中定义了一个导出:

[Export(typeof(Foo))]
public class Foo
{
    ...
}

有没有办法确定Foo的导出来自CompositionContainer中的AssemblyA?

我要做的是,对于任何提供MEF导出的给定程序集,它还必须包含一个特定接口的MEF导出。我希望能够标记任何不符合此规则的程序集。

2 个答案:

答案 0 :(得分:2)

在CompositionContainer中无法做到这一点。我建议为每个程序集创建一个AssemblyCatalog,并检查它的任何部件是否具有与所需接口匹配的ExportDefinition。

答案 1 :(得分:1)

您可以使用静态ComposablePartDefinition方法识别ReflectionModelServices.GetPartType的类型和程序集。以下示例创建一个包含容器目录中包含的类型的不同程序集的列表:

var assemblies = container.Catalog.Parts
    .Select(part => ReflectionModelServices.GetPartType(part).Value.Assembly)
    .Distinct()
    .ToList();