2015-11-06 3 views
1

У нас есть много продуктов, которые будут совместно использовать общие DLL. Для продукта я хотел бы указать конкретный список DLL для включения в каталог. Я знаю, что смогу это сделать:MEF - Список DLL для загрузки

var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(new AssemblyCatalog(typeof(MainWindow).Assembly)); 

string fullPath = Path.Combine(@"D:\Folder\With\Plugins", "SomePlugin.dll"); 
Assembly dll = Assembly.LoadFile(fullPath); 
ComposablePartCatalog assemblyCatalog = new AssemblyCatalog(dll); 
catalog.Catalogs.Add(assemblyCatalog); 

_container = new CompositionContainer(catalog); 
_container.ComposeParts(this); 

Будет ли цикл в средней части для каждого конкретного файла лучшим методом?

ответ

0

MEF предоставляет каталог DirectoryCatalog. Все, что вам нужно сделать, это указать каталог, содержащий плагины, и он будет обрабатывать все остальное, а не цикл. Что-то вроде этого:

string fullPath = Path.Combine(@"D:\Folder\With\Plugins");  
var catalog = new DirectoryCatalog(fullPath); 
_container = new CompositionContainer(catalog); 
_container.ComposeParts(this); 
+0

Да, я знаю это, но это не значит, что каждая DLL, расположенная в этом каталоге, должна быть загружена для этого конкретного продукта. Вот почему мне нужен какой-то список для ** конкретных ** DLL, чтобы сказать: «Этот продукт использует библиотеки DLL A, B и C, в то время как этот другой продукт использует библиотеки DLL, B, C, D, E и F». –

+0

Являются ли «продукты» различными приложениями? Тогда, возможно, они могут прочитать путь к папке из конфигурации и загрузить любую DLL в эту папку с помощью DirectoryCatalog. –