MEF:获取成功加载的插件文件和导出类型的列表

时间:2018-11-28 12:41:56

标签: c# .net plugins mef

我正在使用非常标准的MEF从目录中加载插件:

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));

        this.directoryCatalog = new DirectoryCatalog(pluginDirectory);
        catalog.Catalogs.Add(directoryCatalog);

        this.container = new CompositionContainer(catalog);

        try
        {
            this.container.ComposeParts(this);
        }
        catch (CompositionException compositionException)
        {
            log.Error(compositionException);
            throw;
        }
        catch (System.Reflection.ReflectionTypeLoadException rtle)
        {
            foreach (var e in rtle.LoaderExceptions)
                log.Error(e);
        }

在我的插件目录中,我有不公开IPlugin界面的插件以及其他.dll文件。

我想获取成功加载的IPlugin实现的列表以及它们来自哪个文件。

我尝试查看directoryCatalog.LoadedFiles,但这只是列出目录中的文件,无论它们是实际的插件还是其他。

我已经查看了导出定义,但这对实现的原始文件一无所知。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式检查已加载的插件:

[ImportMany(typeof(IPlugin))] public IEnumerable<IPlugin> _plugins;

Plugin的实现应标记为[Export(typeof(IPlugin))]。之后,您将在_plugins变量中加载插件