У меня вопрос о составе 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. Не уверен, что это имеет значение ...
ТИА, Грег
Внесение имен файлов DLL в файл конфигурации по-прежнему приведет к поражению цели MEF. –
Файл конфигурации обеспечивает гораздо большую гибкость, чем прямое указание каждой DLL в коде. MEF обеспечивает расширяемость. Просто потому, что вы должны указать, какие части включать, не побеждает цель обеспечения расширяемости. (Это включает только еще один шаг.) –