MEF-Kompositionsproblem

8

Ich kann das, was ein grundlegendes MEF-Problem zu sein scheint, nicht lösen: Ich habe 2 "Plugins" -Projekt (die wir P1 und P2 nennen), und ein drittes Projekt, das beiden Plugins gemein ist (die wir C nennen). P1 und P2 verweisen beide auf C.

Beim Versuch, eine Komponente zu importieren, die in P1 lebt, schlägt sie fehl, weil diese Komponente Abhängigkeiten von Komponenten hat, die in C leben.

Hier ist die Spur:

  

System.ComponentModel.Composition Warnung: 1: Die ComposablePartDefinition 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel' abgelehnt wurde. Die Zusammensetzung bleibt unverändert. Die Änderungen wurden aufgrund der folgenden Fehler zurückgewiesen: Die Zusammensetzung verursachte mehrere Zusammensetzungsfehler mit 4 Grundursachen. Die Grundursachen sind unten angegeben. Überprüfen Sie die CompositionException.Errors-Eigenschaft für weitere Informationen.

     

1) Es wurden keine Exporte gefunden, die der Einschränkung 'entsprechen ((exportDefinition.ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel") & amp; & amp; ; (exportDefinition.Metadata.ContainsKey ( "ExportTypeIdentity") & amp; & amp; "MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel" .Equals (exportDefinition.Metadata.get_Item ( "ExportTypeIdentity"))) ) ".

     

in Resultierende: Kann nicht eingestellt Import 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")' auf Teil 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel'.   Element: MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel") - & gt; MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel - & gt; Directory (Path="C: \ Arbeit \ mmtrader \ dashboard \-Code \ Src \ Armaturenbrett \ MM \ Trader \ bin \ Debug \ Plugins \ Positionen")

[...] (Die drei anderen Probleme sind bei verschiedenen Ansichtsmodellen identisch)

Ich habe am MEF Katalog sah, und es stellt sich heraus, dass MEF weiß über diese Ansicht Modelle, so weiß ich nicht, was fehlt.

Wie unten von Dennis gefordert, hier mein Import / Export:

Export:

%Vor%

Importieren:

%Vor%

Und der Katalog:

Vielen Dank im Voraus für Ihre Hilfe!

    
Antoine Jaussoin 13.09.2012, 08:16
quelle

3 Antworten

8

Ich fand schließlich das Problem, und es hatte nichts mit dem CalypsoBookSelectorViewModel zu tun, auf das MEF den Finger zeigte.

Tatsächlich hat das ViewModel Abhängigkeiten von einer anderen Komponente (CalypsoBookSelectorModel), die wiederum von einer IDispatcher-Komponente abhängig ist.

Das Problem war, dass diese IDispatcher-Komponente, die mit einem Vertragsnamen (siehe unten) angegeben wurde, ZWEIMAL (einmal in jedem Plugin) exportiert wurde, sodass MEF nicht erkennen konnte, welche verwendet werden soll . Das eigentliche Problem ist natürlich, dass MEF mir das gesagt haben sollte , anstatt den Finger auf eine Klasse zwei Ebenen in der Kette zu zeigen.

Danke Dennis für das Problem, und ich hoffe, dass dies anderen Menschen helfen wird, die das gleiche Problem bekommen.

Der Dispatcher-Import:

%Vor%     
Antoine Jaussoin 13.09.2012, 09:23
quelle
6

Ihr P1 importiert etwas von C (genauer gesagt, ICalypsoBookSelectorViewModel ).

Wenn der MEF-Container versucht, P1 zu erstellen, versucht er auch, alle Importe aufzulösen, von denen P1 abhängt. Daher führt es die Suche nach dem Export von ICalypsoBookSelectorViewModel type (in der Tat, Vertragsname, aber das spielt in diesem Fall keine Rolle) in seinen eigenen Katalog- und übergeordneten Exportanbietern aus.

Wenn ein solcher Export nicht gefunden wird (dies ist der Fall), bleibt der MEF-Container unverändert Um dies zu beheben, sollten Sie [Export(typeof(ICalypsoBookSelectorViewModel))] zur entsprechenden Typdefinition hinzufügen.

Das bedeutet natürlich, dass Ihre Katalog- und Export-Provider (falls vorhanden) ordnungsgemäß initialisiert werden.

Beachten Sie, dass diese Exportdefinitionen nicht gleich sind:

%Vor%     
Dennis 13.09.2012 08:42
quelle
0

Der Fehler tritt auf, weil er [Import] verwendet. Um mehr als einen zu importieren, sollten Sie [ImportMany]

verwenden     
Renatto Machado 22.08.2017 21:27
quelle

Tags und Links