J'ai souvent rencontré une situation similaire avec MVC. La façon dont j'aime le manipuler est d'utiliser un motif de conception de médiateur dans le contrôleur.
Fondamentalement, vous avez une classe qui a une fonction de registre et une fonction de notification. La fonction de registre prend un objet qui implémente une interface d'écoute et un messageId. Il stocke ceux-ci dans un dictionnaire. La fonction notify prend un messageId pour l'événement qui doit être envoyé aux écouteurs et notifie les événements appropriés que l'événement s'est produit.
peut-être donc quelque chose le long des lignes de
public interface IListener
{
void MessageRaised(int messageId, params object[] arguments);
}
public class Mediator
{
public void Register(IListener listener, int messageId)
{
//... add to dictionary of arrays for each messageId
}
public void NotifyListeners(int messageId, params object[] arguments)
{
//... loop through listeners for the messageId and call the MessageRaised function for each one
}
}
Maintenant, normalement j'ai un contrôleur de base et il met en oeuvre un objet statique Mediator. Ensuite, tous mes autres contrôleurs en héritent. Si vous utilisez le code et que vous ne pouvez pas hériter, vous pouvez essayer d'utiliser un modèle singleton. Les classes statiques .Net sont plutôt géniales car elles ont un constructeur donc vous pouvez aussi l'utiliser. Donc dans votre cas, j'aurais le code derrière pour chaque outil de contrôle IListener et ensuite dans le constructeur pour chacun, avoir quelque chose comme Mediator.GetInstance(). Register (this, Messages.MyEvent). C'est une manière rapide et sale qui peut être refactorisée un peu dans le futur pour la rendre un peu plus réutilisable.
Certaines ressources d'une recherche rapide Google
http://www.avajava.com/tutorials/lessons/mediator-pattern.html
http://sourcemaking.com/design_patterns/mediator
Bonne chance