2011-12-07 5 views
0

У меня вопрос о составе MEF. В моей среде разработки я могу использовать этот код для импорта деталей.MEF Composition Issue Issue

var dirCatalog = new DirectoryCatalog(path, "MyCompany.*.dll");    
var container = new CompositionContainer(dirCatalog); 
container.SatisfyImportsOnce(this); 

Однако, когда я развертываю на тестовом сервере, который не работает. Единственный способ, который я нашел, чтобы сделать это правильно работать, чтобы явно загрузить динамические библиотеки, которые имеют экспорт, как это:

var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Modelling.dll")))); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.AppServer.Dispatchers.dll")))); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Service.dll")))); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentService.Proxy.dll")))); 
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentPropertyService.Proxy.dll")))); 

var container = new CompositionContainer(catalog); 
container.SatisfyImportsOnce(this); 

Очевидно, что я не хочу, чтобы явно загружать каждую библиотеку DLL, которая имеет экспорт в нем ; это своего рода поражение цели MEF. Но сейчас это единственное, что я нашел, что работает.

Этот код находится в специализированной фабрике хостов, используемой для запуска службы WCF, размещенной в IIS. Не уверен, что это имеет значение ...

ТИА, Грег

ответ

0

Почему бы не имена файлов DLL внутри XML или другой конфигурационный файл. По крайней мере, вам не придется перекомпилировать.

я предлагаю, имеющий по крайней мере ..

файла и IsEnabled, таким образом, вы можете просто переключать IsEnabled вместо того, чтобы комментировать в файле XML.

+0

Внесение имен файлов DLL в файл конфигурации по-прежнему приведет к поражению цели MEF. –

+0

Файл конфигурации обеспечивает гораздо большую гибкость, чем прямое указание каждой DLL в коде. MEF обеспечивает расширяемость. Просто потому, что вы должны указать, какие части включать, не побеждает цель обеспечения расширяемости. (Это включает только еще один шаг.) –