Как загрузить dll из каталога, используя MEF (Managed Extensibility Framework) - PullRequest
3 голосов
/ 18 мая 2009

Я сейчас работаю с MEF и сталкиваюсь с некоторыми проблемами

я хочу загрузить dll из каталога.

сначала я сканирую каталог и сохраняю две вещи в словаре

Имя свойства из соответствующей DLL (в виде строки)

и имя модуля (в виде строки)

вот код ScanDirectory ()

private void ScanPluginDirectory()
{
    catalog = new AggregateCatalog();

    catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\plugin"));            
    container = new CompositionContainer(catalog);

    batch = new CompositionBatch();
    batch.AddPart(this);        

    container.Compose(batch);    

    pluginDictionary = new Dictionary<String, String>();
    foreach (IFilter filter in filters)
    {
        Type t = filter.GetType();
        pluginDictionary.Add(filter.Name, t.Module.Name);
    }
}

и показать их имя в списке флажков. при выборе dll из флажка.

У меня есть оператор импорта как

[Import]
public IEnumerable<IFilter> filters { get; set; }

В настоящее время моя программа работает нормально. что я сделал, когда я проверяю плагин из списка флажков. он перемещает его в «загруженный» каталог и метод QueryPlugin () просматривает «загруженный» каталог для поиска плагинов.

при снятии флажка с плагина из списка флажков. я перемещаю его из "загруженного" каталога ...

Я хочу использовать метод batch.RemovePart (), чтобы избавиться от этого быстрого перемещения библиотек DLL из одного каталога в другой ....

ПРИМЕЧАНИЕ: я не добавляю плагины вручную в пакет, используя

batch.AddPart(new DemoFilter1());

вместо этого я использовал DirectoryCatalog () ;;

1 Ответ

3 голосов
/ 18 мая 2009

Вместо использования DirectoryCatalog используйте AggregateCatalog и добавьте AssemblyCatalog для каждой сборки в каталоге в совокупный каталог. Затем, когда плагин отмечен или не отмечен, вы можете добавить или удалить соответствующий AssemblyCatalog в AggregateCatalog.

Обратите внимание, что при таком подходе могут возникнуть проблемы, если в данной сборке более одного плагина. Более надежный подход может заключаться в фильтрации отдельных определений деталей с использованием отфильтрованного каталога .

...