Ich bin bei der Arbeit mit MVC oft auf eine ähnliche Situation gestoßen. Die Art und Weise, wie ich damit umgehe, ist die Verwendung eines Mediator-Designmusters im Controller.
Im Grunde genommen haben Sie eine Klasse, die eine Register-Funktion und eine Notify-Funktion hat. Die Register-Funktion nimmt ein Objekt entgegen, das ein Listener-Interface implementiert, und eine Nachrichten-ID. Diese werden in einem Wörterbuch gespeichert. Die Notify-Funktion nimmt eine Nachrichten-ID für das Ereignis, das an die Zuhörer gesendet werden muss, und benachrichtigt die entsprechenden Personen, dass das Ereignis eingetreten ist.
Also vielleicht etwas in der Art von
public interface IListener
{
void MessageRaised(int messageId, params object[] arguments);
}
public class Mediator
{
public void Register(IListener listener, int messageId)
{
//... zum Dictionary der Arrays für jede Nachrichten-ID hinzufügen
}
public void NotifyListeners(int messageId, params object[] arguments)
{
//... Schleife durch Zuhörer für die Nachrichten-ID und rufen Sie die MessageRaised-Funktion für jeden auf
}
}
Normalerweise habe ich einen Basiscontroller und es implementiert ein statisches Mediator-Objekt. Dann erben alle meine anderen Controller davon. Wenn Sie den Code hinter verwenden und nicht erben können, können Sie versuchen, das Singleton-Muster zu verwenden. .NET-Static-Klassen sind auch ziemlich gut, da sie einen Konstruktor haben, den Sie ebenfalls verwenden könnten.
In Ihrem Fall würde ich den Code hinter für jede Steuerung implementieren IListener und dann im Konstruktor für jede etwas wie Mediator.GetInstance().Register(this, Messages.MyEvent) haben. Das ist sozusagen ein schneller und schmutziger Weg, der in Zukunft etwas überarbeitet werden kann, um ihn etwas wiederverwendbarer zu machen.
Einige Ressourcen aus einer schnellen Google-Suche
http://www.avajava.com/tutorials/lessons/mediator-pattern.html
http://sourcemaking.com/design_patterns/mediator
Viel Glück