Вы можете достичь пунктов 1. и 3., поместив каталоги в разные поставщики экспорта, а затем передав поставщики экспорта конструктору CompositionContainer
в порядке приоритета, подобном следующему:
var dirCatalog = new DirectoryCatalog(...);
var provider1 = new CatalogExportProvider(dirCatalog);
var assemblyCatalog = new AssemblyCatalog(...);
var provider2 = new CatalogExportProvider(assemblyCatalog);
var container = new CompositionContainer(provider1, provider2);
// link the export providers back to the container, so that they can
// resolve parts from other export providers
provider1.SourceProvider = container;
provider2.SourceProvider = container;
Сейчасвы можете использовать container
как обычно, и он сначала будет искать детали в каталоге, а затем - каталог сборки.Вы не получите исключений по количеству элементов, если они присутствуют в обоих.
Для достижения пункта 2. необходимо пометить отдельные операции импорта, чтобы разрешить значение по умолчанию (например, null
), с помощью [Import(typeof(SomeType),AllowDefault=true]
. * 1010.*