MEF composition problème
Je ne peux pas résoudre ce qui semble être une base MEF problème:
J'ai 2 "plugins" du projet (que nous allons appeler P1 et P2), et un troisième projet qui est commun à ces deux plugins (que nous appellerons C). P1 et P2 les deux référence C.
Lorsque vous tentez d'importer un composant qui vit en P1, il échoue parce que ce composant a des dépendances sur des composants qui vivent dans C.
Ici, c'est la trace:
Système.ComponentModel.Composition D'Avertissement: 1 : Le ComposablePartDefinition 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel " a été rejeté. La composition reste inchangée. Les modifications ont été rejetés en raison de l'erreur suivante(s): La composition du produit de multiples composition des erreurs, avec 4 causes profondes. Les causes profondes sont fournis ci-dessous. Examen de la CompositionException.Les erreurs de propriété pour des informations plus détaillées.
1) Aucune exportation n'a été trouvé qui correspondent à la contrainte '((exportDefinition.ContractName = "MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel") && (exportDefinition.Les métadonnées.ContainsKey("ExportTypeIdentity") && "MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))'.
: Impossible de définir à l'importation 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")"sur la partie 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel'.
Élément: Monentreprise.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel") --> MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel --> DirectoryCatalog (Path="C:\Work\mmtrader\dashboard\Code\Src\Dashboard\MM\Trader\bin\Debug\Plugins\Positions")
[...] (Les 3 autres problèmes sont exactement les mêmes sur les différents modèles de vue)
J'ai regardé le MEF catalogue, et il s'avère que le MEF sait à propos de ces modèles de vue, donc je ne sais pas ce qu'il manque.
Comme demandé par Dennis ci-dessous, voici mon import/export:
À l'exportation:
Export(typeof(ICalypsoBookSelectorViewModel))]
public class CalypsoBookSelectorViewModel : ScreenWithCleanupLifecycle, ICalypsoBookSelectorViewModel
{...}
D'importation:
[Import(typeof(ICalypsoBookSelectorViewModel))]
public ICalypsoBookSelectorViewModel CalypsoBookSelectorViewModel { get; set; }
Et le catalogue:
Merci d'avance pour votre aide!
OriginalL'auteur Antoine Jaussoin | 2012-09-13
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé le problème, et il n'avait rien à voir avec la CalypsoBookSelectorViewModel que le MEF a été pointée du doigt.
En effet, ce Dernier a des dépendances sur un autre composant (a CalypsoBookSelectorModel), qui à son tour a une dépendance sur un IDispatcher composant.
Le problème était que cette IDispatcher composant, qui a été spécifié avec un nom de contrat (voir ci-dessous), a été exporté deux fois (une fois dans chaque plug-in), donc MEF ne pouvait pas dire que l'on à utiliser.
Le vrai problème est bien sûr que MEF devrait m'ont dit que, au lieu de pointer du doigt une classe à deux niveaux de la chaîne.
Merci Dennis pour la recherche sur le problème, et j'espère que cela aidera d'autres personnes qui aurez le même problème.
Le Répartiteur d'importation:
Je voudrais bien, mais je ne peux pas avant deux jours apparemment. Je vais le faire dans les 48 heures, sauf si quelqu'un peut le faire pour moi avant alors!
Juste assez. Merci!
mais MEF dit de vous en parler! 🙂 Regardez attentivement dans votre fenêtre de sortie, et vous allez voir comme quelque chose de "Plus d'un à l'exportation a été trouvée, qui correspond à la contrainte" lors de la construction de la partie (en fonction de
IDispatcher
). Bien sûr, si la partie n'est pas composé, selon les parties ne seront pas construits. Malheureusement, je ne sais pas comment poster exemple de code ici pour reproduire ce message.J'ai regardé de nouveau sur le journal, et la seule chose que j'ai pu trouver a été le Système.ComponentModel.Informations Sur La Composition: 6 : La ComposablePartDefinition 'MyCompany.Le tableau de bord.Client.Les Plugins.Commun.Cadre.IDispatcher " a été ignoré car il ne contient pas les exportations. Le problème est qu'il a été dans le milieu d'un tas d'autres choses, et si je savais en premier lieu, que la IDispatcher le problème, je ne pouvais pas l'avoir trouvé!
OriginalL'auteur Antoine Jaussoin
Votre
P1
importations quelque chose deC
(plus exactement,ICalypsoBookSelectorViewModel
).Quand conteneur MEF essaie de créer
P1
, il tente également de résoudre toutes les importations, quiP1
dépend de. Par conséquent, il effectue de la recherche pour l'exportation deICalypsoBookSelectorViewModel
type (en effet, le nom du contrat, mais il n'a pas d'importance dans ce cas) dans son propre catalogue de parent et à l'exportation des fournisseurs.Si l'exportation n'est pas trouvé (ce qui est votre cas), le MEF conteneur reste de la composition inchangée.
Pour résoudre ce problème, vous devez ajouter
[Export(typeof(ICalypsoBookSelectorViewModel))]
à la correspondante de la définition de type.Bien sûr, tout cela implique que votre catalogue et de l'exportation des fournisseurs (si il y en a) sont initialisés correctement.
Noter, que cette exportation définitions sont pas l'égalité:
s'il vous plaît, montrez import définition dans
P1
.Salut à nouveau, j'ai regardé votre édité réponse, et je comprends tout cela: je crois que mon importer/exporter les attributs sont corrects, ils correctement définir l'interface etc. D'autre part, il semble que le MEF est un peu en me mentant à moi que je commence à penser que le problème n'est pas directement avec mon ICalypsoBookSelectorViewModel mais avec un autre importent beaucoup en bas de la ligne (MEF ne me le raconter). Je vais revenir vers vous si cette piste mène quelque part
Je viens d'ajouter l'import/export pour la question d'origine
votre importer/exporter les définitions semble OK; pourriez-vous poster les pièces à partir du catalogue, utilisé dans le conteneur MEF (par exemple, la capture d'écran de débogueur)? Je ne crois pas aux miracles...
OriginalL'auteur Dennis
L'erreur ocurr parce qu'il aide
[Import]
, pour importer plus d'un que vous devriez utiliser[ImportMany]
OriginalL'auteur Renatto Machado