Mef导入实现运行时指定的接口的所有类型

时间:2011-02-24 18:47:26

标签: c# .net c#-4.0 mef

我可以编写一个类来使用mef导入实现特定接口的所有类型,然后在运行时指定此接口。 (我知道我需要用导出来标记实现者)

使用示例:

IEnumerable<IExcitingClass> excitingClasses = ClassImporter<IExcitingInterface>.ImportAllFrom(specifyDirectory);

这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用DirectoryCatalog创建容器,然后调用container.GetExportedValues<IExcitingClass>。这就是你想要的吗?

答案 1 :(得分:1)

在运行时,您只能使用字符串来指定您的界面。

    public IEnumerable<object> GetAllInheritors(string interfaceName)
    {
        Assembly assembly = this.GetType().Assembly;
        foreach (var part in Container.Catalog.Parts)
        {
            Type type = assembly.GetType(part.ToString());
            if (type != null)
                if (type.GetInterface(interfaceName) != null)
                {
                    yield return part.CreatePart().GetExportedValue(part.ExportDefinitions.First());
                }
        }
    }