Dans mon programme, il y a un endroit où j'ai besoin d'accéder à un singleton résolu d'une usine et le joindre à son événement:Attachement à un événement singleton instancié en usine - quelle serait une approche propre?
void MyMethod()
{
myFactory.Resolve<MySingleton>().DoWork += WorkMethod;
}
Le problème est que MyMethod peut être exécuté plusieurs fois, mais je veux joindre à l'événement qu'une seule fois (sinon j'obtiendrai plusieurs appels). Donc, je veux attacher seulement quand je n'étais pas attaché avant. Il n'y a rien nicier que
myFactory.Resolve<MySingleton>().DoWork -= WorkMethod;
myFactory.Resolve<MySingleton>().DoWork += WorkMethod;
Vous pouvez placer l'événement et la logique 'hasBeenCalled' dans une méthode privée. Je le fais habituellement pour l'enlever de MyMethod(). Si vous avez de nombreux événements, cela encombre la méthode originale. – TheSean
Je pense que c'est une bonne approche, mais mon singleton n'est pas un singleton "à vie". Parfois, il peut être recréé, donc il semble que, à la place du drapeau, je devrais utiliser une référence à celui-ci. –