Alla base della mia candidatura ho un AggregateCatalog e un CompositionContainer in questo modo:Definizione Scope in MEF con CompositionScopeDefinition
AggregateCatalog aggregateCatalog = new AggregateCatalog();
CompositionContainer compositionContainer = new CompositionContainer(aggregateCatalog);
miei carichi applicativi dei moduli che contengono diversi esportazioni, come indicato nello schema seguente. Voglio usare CompositionScopeDefinition per esplorare le esportazioni cerchiate nel diagramma.
See here for the class definitions.
// Create CompositionScopeDefinition.
TypeCatalog globalParts = new TypeCatalog(typeof(RequestListener));
TypeCatalog scopedParts = new TypeCatalog(typeof(RequestHandler), typeof(DataAccessLayer), typeof(Logger), typeof(DatabaseConnection));
CompositionScopeDefinition compositionScopeDefinition = new CompositionScopeDefinition(
globalParts,
new[] { new CompositionScopeDefinition(scopedParts, null) });
// Register CompositionScopeDefinition.
aggregateCatalog.Catalogs.Add(compositionScopeDefinition);
// Create an instance of RequestListener.
RequestListener requestListener = compositionContainer.GetExportedValue<RequestListener>();
Tuttavia, questo fa sì che la seguente eccezione:
System.ComponentModel.Composition.ImportCardinalityMismatchException verificato Messaggio = Nessun esportazioni sono stati trovati che corrispondono al vincolo: ContractName MyNamespace. RequestListener RequiredTypeIdentity MyNamespace.RequestListener InnerException:
Come posso aggiungere i miei esportazioni con ambito utilizzando CompositionScopeDefinition a un AggregateCatalog esistente e inizializzare loro usando il mio CompositionContainer esistente?
Aggiornamento
Sembra che il problema utilizzando un AggregateCatalog. Se aggiungo la CompositionScopeDefinition a CompositionContainer direttamente tutto funziona, ma questo non mi consente di aggiungere altri cataloghi a CompositionContainer.
Come si inserisce questo con Prism Bootstrapper? –