Pregunta

Me he preguntado muchas veces sobre ello, pero ahora que he encontrado un pedazo de lógica que lo incorpora, pensé que debería seguir adelante y conseguir un poco de ayuda en descifrar los fundamentos. El problema es el siguiente, estoy buscando a una aplicación de WPF que está utilizando la biblioteca de aplicaciones compuestas. Dentro de la fuente de la aplicación me encontré con la siguiente línea de código en la presentación de una vista. En aras de la conveniencia lo llamaré Presentación A:

private void OnSomethingChanged(SomeArgumentType arguement)
{
   UnityImplementation.EventAggregator.GetEvent<EventA>().Publish(null);
}

Cuando vi el método Publicar en el método indicado anteriormente, mi instinto me dijo que debe haber un Suscribirse a alguna parte y en otra clase, voy a llamarlo Presentación B no era la siguiente:

UnityImplementation.EventAggregator.GetEvent(Of EventA).Subscribe(AddressOf OnSomeEventA)

No había una función privada de la misma clase llamada OnSomeEventA que tenía cierta lógica en ella.

Mi pregunta aquí es que la forma está todo conectado por aquí? Lo que se consigue precisamente por el 'Publicar' 'Suscribirse' aquí? Cuando los cambios 'algo', ¿cómo sabe el compilador tiene que seguir la lógica de OnSomethingChanged que 'Publicar' un evento que se 'Suscrito por medio de otra clase en la que se ha descrito la lógica del controlador de eventos? Será grande para entender el cableado subyacente de este proceso.

Gracias

¿Fue útil?

Solución

La primera GetEvent<T> tiempo se llama para cada evento (identificado por el parámetro T tipo) el EventAggregator crea una lista vacía de métodos para llamar cuando se publica ese evento. Por lo general, esto ocurrirá inmediatamente antes de la primera llamada a Publish o Subscribe (como en los ejemplos).

A continuación:

  • Siempre que Subscribe se llama un método se añade a la lista.
  • Cada vez que se llama Publish que camina a través de la lista y hace esas llamadas.

Por lo tanto, la llamada a Publish() en los resultados de Presentación A en todos los métodos que se han registrado llamando Subscribe ser llamado, que en su ejemplo incluiría método OnSomeEventA de Presentación B.

Trate de establecer un punto de interrupción en el método OnSomeEventA y echar un vistazo a la pila, y no se olvide la fuente está disponible, también!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top