2017-06-13 1 views
0

Dans mon application actuelle, j'utilise une classe observable 'selfmade' pour implémenter le pattern d'observateur. Les observateurs (implémentant une interface) peuvent écouter certains événements.Où enregistrer des observateurs lors de l'utilisation de conteneurs IoC?

Je change de plus en plus du projet à l'aide d'un conteneur IoC, mais je ne trouvent pas un bon endroit dans le code pour enregistrer les observateurs avec l'observable.

Les façons de le faire que je vois sont:

A) Injecter l'observable dans l'observateur.
Le constructeur ne devrait pas effectuer de travail réel, mais même avec une injection de méthode ou de champ, cela associe l'observateur à l'observable. C'est aussi le cas si c'est l'inverse. B12) Créer une usine observable et le faire là.
Dans ce cas, la création de l'observable dépend des implémentations de plusieurs observateurs.

C) Créez les observateurs par usine et faites-le là.
Alors que cela me semble le mieux concernant le couplage, il s'avère mauvais concernant DRY. Dans certains cas, l'usine finit par être une copie des champs et constructeur de l'observateur, plus l'observable et plus la ligne d'un code pour l'enregistrement.

Existe-t-il un moyen de gérer cette inscription de manière propre? Si non, y a-t-il des arguments convaincants pour utiliser un certain chemin par rapport aux autres?

Répondre

0

La solution a été la découverte de la différence entre les méthodes Resolve() et() Instantiate.

J'utilisais toujours Resolve(). Avec cela, je recevrais un observateur de la façon dont il a été lié au conteneur.

Cependant, Instantiate() ne se soucie pas de la façon dont la classe est liée au conteneur. Il crée la classe de la manière standard, mais injecte toujours les dépendances. Donc, cela peut être utilisé à l'intérieur de l'usine pour l'observateur.