Когда MEF находит два экспорта для ClassA
, когда он ожидает только одного, он выдает CompositionException
, говоря, что существует проблема с количеством элементов.Он не знает, как выбирать между ними.
Существует способ обойти это: если вы передаете несколько поставщиков экспорта в контейнер, контейнер будет запрашивать каждого поставщика экспорта по очереди, когда будет искать экспорт.Первый поставщик экспорта, который предоставит часть, побеждает.
В следующем примере экспорт, предоставляемый сборками в «настраиваемой» подпапке, переопределяет экспорт, предоставляемый сборками в папке исполняемого файла.
var defaultExportProvider =
new CatalogExportProvider(new DirectoryCatalog(".","*"));
var customizedExportProvider =
new CatalogExportProvider(new DirectoryCatalog(@".\customized"));
var container = new CompositionContainer(
customizedExportProvider, defaultExportProvider);
defaultExportProvider.SourceProvider = container;
customizedExportProvider.SourceProvider = container;
edit :
Поскольку описанное решение не является удовлетворительным, я могу только предположить, что вы используете ImportMany
вместо Import
.В этом случае вы все равно получите оба экспорта, и вам придется добавить к ним метаданные .Затем вы можете написать код в своем классе импорта, который решит, какой импорт является «лучшим».См. Также сообщение в блоге от Даниэль Плейстед .