MEF Композиция Импорт вопрос - PullRequest
0 голосов
/ 08 декабря 2011

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

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

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

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.Не уверен, что это имеет значение ...

TIA, Грег

1 Ответ

0 голосов
/ 15 декабря 2011

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

Я бы предложил иметь хотя бы ..

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

...