An der Wurzel meiner Anwendung habe ich eine AggregateCatalog und CompositionContainer etwa so:Scope Definition in MEF mit CompositionScopeDefinition
AggregateCatalog aggregateCatalog = new AggregateCatalog();
CompositionContainer compositionContainer = new CompositionContainer(aggregateCatalog);
Module Meine Anwendung Lasten bis die mehrere Exporte enthalten, wie sie in der Abbildung unten dargestellt. Ich möchte CompositionScopeDefinition verwenden, um die im Diagramm eingekreisten Exporte zu definieren.
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>();
Dies verursacht jedoch die folgende Ausnahme:
System.ComponentModel.Composition.ImportCardinalityMismatchException Nachricht aufgetreten = Keine Exporte wurden gefunden, dass das Spiel Einschränkung: ContractName MyNamespace. RequestListener RequiredTypeIdentity MyNamespace.RequestListener Innerexception:
Wie kann meine scoped Exporte mit CompositionScopeDefinition zu einem bestehenden AggregateCatalog hinzufügen und initialisieren sie meine vorhandenen CompositionContainer mit?
aktualisieren
Es scheint, dass das Problem ein AggregateCatalog verwenden. Wenn ich die CompositionScopeDefinition direkt dem CompositionContainer hinzufüge, funktioniert alles, aber das hindert mich daran, dem CompositionContainer andere Kataloge hinzuzufügen.
Wie passe ich das mit Prism Bootstrapper? –