2009-05-18 1 views
3

я в настоящее время работают с MEF и сталкивается с некоторыми проблемамиКак загрузить из каталога библиотеки DLL с помощью MEF (Managed Extensibility Framework)

то, что я хочу, чтобы загрузить библиотеки 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() ;;

+0

еще нет ответа :( – Mohsan

ответ

3

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

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

Смежные вопросы