je la configuration suivante:Prism: EventAggregator et MEF - 2 cas différents de EventAggregator
- Un split application Silverlight sur xaps/modules
J'utilise MEF comme cadre DI pour se connecter différentes parties de ma demande.
J'ai 2 régions:
un (celui de gauche) est peuplé de une vue de la liste (par exemple clients)
One (la droite) est peuplé de une vue contenant un tabcontrol avec une région que j'ai rempli (selon auquel le client est sélectionné) avec une autre vue contenant un contrôle de tabulation avec une région.
Le résultat du côté droit:
pour alimenter le premier niveau tabcontrol Je suis à l'écoute du « événement changé client » - (ce qui fonctionne très bien) et quand je reçois recevoir l'événement I alimenter la zone onglet de premier niveau avec vue:
Dim lReg As IRegion = Me.mRegionManager.Regions("FirstLevelTabReqion")
Dim lViewID As String = CommonDefinitions.Constants.BuildFirstLevelViewName(lUniqueID)
Dim lFirstLevelView FirstLevelView = TryCast(lReg.GetView(lRqViewID), FirstLevelView)
If lFirstLevelView Is Nothing Then
lFirstLevelView = New FirstLevelView()
Dim lRegMan1 As IRegionManager = lReg.Add(lFirstLevelView, lViewID, True)
lFirstLevelView.SetRegionManager(lRegMan1)
...
End If
note: Lors de la création du FirstLevelView je dois jeter dans un appel CompositionInitializer.SatisfyImports
pour vous assurer que le FirstLevelView résout sa référence ViewModel.
Pour obtenir une instance de la EventsAggregator dans le SecondLevel ViewModel J'utilise:
<ImportingConstructor()>
Public Sub New(ByVal iEvAggregator As IEventAggregator)
EventAggregator = iEvAggregator
EventAggregator.GetEvent(Of DoStuffSecondLevel).Subscribe(AddressOf OnDoStuffSecondLevel, True)
End Sub
Mon problème est que l'instance EventAggregator je reçois dans le deuxième modèle de vue niveau est différent de l'instance EventAggregator dans le premier niveau donc si je publie DoStuffSecondLevel au premier niveau, il ne sera pas pris au second niveau. Pourquoi ai-je deux instances différentes de l'EventAggregator?
Que puis-je faire pour partager la même instance de l'EventAggregator dans l'application?
Merci à l'avance
Je voudrais ajouter à cela que j'ai rencontré le même problème. Je voudrais une solution où j'obtiens la MÊME INSTANCE en utilisant 'ComponentInitializer.SatisfyImports (this);' J'ai utilisé le 'ComponentInitializer.SatisfyImports (...)' pour que je puisse new() mes autres ViewModels (donc je ne Je n'ai pas besoin de réinitialiser manuellement leurs états), ce qui m'a conduit à utiliser les SatisfyImports pour obtenir mes services, principalement EventAggregator. – michael
Veuillez vérifier quelques points: 1. Lorsque vous configurez votre conteneur MEF, définissez-vous la stratégie de création par défaut sur CreationPolicy.NonShared? 2. Possédez-vous un attribut PartCreationPolicy sur votre classe EventAggregator? 3. Est-il possible que vous créez un objet CompositionContainer distinct pour le secondLevelViewModel? –