Lo que describes se parece al Mediator pattern, en el que los objetos se comunican a través de mensajes. Estos mensajes se pueden implementar como eventos, devoluciones de llamada o cualquier otro mecanismo.
Se podría utilizar un aplicación como Messenger
clase MVVM Light 's (este marco está destinado para su uso con WPF y Silverlight, pero se puede obtener el código para esta clase en particular y usarlo en Windows Forms)
// Register for a specific message type
Messenger.Default.Register<TypeOfTheMessage>(this, DoSomething);
...
// Called when someone sends a message of type TypeOfTheMessage
private void DoSomething(TypeOfTheMessage message)
{
// ...
}
// Send a message to all objects registered for this type of message
Messenger.Default.Send(new TypeOfTheMessage(...));
Una gran ventaja de la clase Messenger
sobre un evento estático es que utiliza referencias débiles, por lo que no impide la recolección de basura de los objetos suscritos, lo que reduce el riesgo de pérdidas de memoria.
Ver this link para obtener más información acerca de la clase Messenger
Tenga cuidado con las fugas de memoria si va por ese camino ... el evento guardará fuertes referencias a sus controladores, y evitará que se recopilen si no se da de baja –
¿Cómo es que el evento contiene fuertes referencias a sus controladores en ¿este caso? ¿Puedes elaborar? – AllSolutions
@AllSolutions, porque los eventos por definición contienen referencias a los manejadores. Es solo que los eventos estáticos nunca salen del alcance, ya que son estáticos, mientras que los eventos de instancia quedarían fuera del alcance junto con el objeto que los contenga cuando se recopile. –