Как использовать MEF и встроенные ресурсы DLL в проекте DLL C #

1

Для важного проекта я должен использовать MEF для сборки большой сборки. Сборка должна включать веб-сервер.

Мой вопрос в том, как я могу загрузить и добавить встраиваемые dll в свой проект с помощью MEF? Прежде чем я использовал этот подход, который работает:

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new DirectoryCatalog(@"R:\DNN\Extensions", "*.dll"));

        var container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException compositionException)
        {
            Console.WriteLine(compositionException.ToString());
        }  

Но с этим решением очень сложно использовать! Я не могу обновить dll в папке Extansions, когда они используются.

Единственный способ - перезапустить DNN cms или зарядить обновленные DLL в новой папке ExtensionsBis.

Я должен найти новое решение для компоновки проекта с extarnal dlls. Я попробовал это решение со встроенными dll:

        var catalog = new AggregateCatalog();
        var resourceNames = GetType().Assembly.GetManifestResourceNames();
        foreach (var resourceName in resourceNames)
        {
            using (var stream = GetType().Assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null) continue;
                var ba = new byte[(int)stream.Length];
                stream.Read(ba, 0, (int)stream.Length);
                catalog.Catalogs.Add(new AssemblyCatalog(Assembly.Load(ba)));
            }
        }
        var container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException compositionException)
        {
            Console.WriteLine(compositionException.ToString());
        }

DLL загружается и добавляется в каталог, у меня нет исключения в составе.

Но когда я пытаюсь выполнить экспортированные функции или присоединяюсь к классу во время выполнения, у меня есть исключение "Ссылка на объект не установлена в экземпляр объекта".

Catalog.catalogs.count дает количество обрядов заряженных dll, но состав MEF, кажется, терпит неудачу.

Можно ли загружать плагины MEF dlls таким образом? Какова наилучшая практика использования MEF внутри dll?

Спасибо за помощь.

Теги:
dll
mef

1 ответ

0

Используйте класс FileSystemWatcher для отслеживания папки, в которой хранятся ваши плагины. Настройте обработчик событий для события "Создано" и загрузите библиотеку с помощью исходного блока кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню