I tienen la siguiente configuración:Prism: EventAggregator y MEF - 2 instancias diferentes de EventAggregator
- una división aplicación Silverlight través xaps/módulos
utilizo MEF como marco DI para conectar varias partes de mi aplicación.
tengo 2 regiones:
One (el de la izquierda) se rellena con una vista de lista (por ejemplo, clientes)
One (el derecho) se rellena con una vista que contenga un tabcontrol con una región que rellené (según a la que se selecciona cliente) con otra vista que contiene un control de pestaña con una región.
El resultado lado derecho:
para poblar el primer nivel tabcontrol estoy escuchando el "evento cambiado al cliente" - (esto funciona muy bien) y cuando llego a recibir el evento que pueblan el en primer área de la ficha de nivel con Vistas:
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
Nota: al crear el FirstLevelView tengo que tirar en una llamada CompositionInitializer.SatisfyImports
para asegurarse de que el FirstLevelView resuelve su referencia de ViewModel.
para obtener una instancia de la EventsAggregator en el SecondLevel modelo de vista que utilizo:
<ImportingConstructor()>
Public Sub New(ByVal iEvAggregator As IEventAggregator)
EventAggregator = iEvAggregator
EventAggregator.GetEvent(Of DoStuffSecondLevel).Subscribe(AddressOf OnDoStuffSecondLevel, True)
End Sub
Mi problema es que la instancia EventAggregator me sale en el segundo modelo de vista nivel es diferente de la instancia EventAggregator en el primer nivel entonces, si publico DoStuffSecondLevel en el primer nivel, no quedará atrapado en el segundo nivel.
¿Por qué obtengo 2 instancias diferentes del EventAggregator?
¿Qué puedo hacer para compartir la misma instancia del EventAggregator en la aplicación?
Gracias de antemano
Me gustaría añadir que me encontré con el mismo problema. Me gustaría una solución en la que obtenga la MISMA INSTANCIA utilizando el 'ComponentInitializer.SatisfyImports (this);' Utilicé el 'ComponentInitializer.SatisfyImports (...)' para que pueda new() mis otros ViewModels (así que No tengo que restablecer sus estados manualmente), lo que me llevó a utilizar SatisfyImports para poder obtener mis servicios, principalmente el EventAggregator. – michael
Compruebe algunas cosas: 1. Cuando configura su contenedor MEF, ¿está configurando la política de creación predeterminada en CreationPolicy.NonShared? 2. ¿Tiene un atributo PartCreationPolicy en su clase EventAggregator? 3. ¿Es posible que esté creando un objeto CompositionContainer separado para SecondLevelViewModel? –