MEF: получить список успешно загруженных файлов плагинов и экспортируемых типов - PullRequest
0 голосов
/ 28 ноября 2018

Я использую довольно стандартный 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);
        }

В моем каталоге плагинов у меня есть плагины, а также другие DLL-файлы, которые не отображают IPluginинтерфейс.

Я хочу получить список успешно загруженных IPlugin реализаций, а также из каких файлов они возникли.

Я пытался просмотреть directoryCatalog.LoadedFiles, но в нем просто перечислены файлы в каталоге, являются ли они настоящими плагинами или нет.

Я посмотрел определения экспорта, ноэто не дает мне понятия о исходном файле реализации.

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете проверить загруженные плагины следующим образом:

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

Plugin Реализация должна быть помечена как [Export(typeof(IPlugin))].После этого вы загрузите плагины в _plugins переменную

...