2010-10-16 6 views
0

Voici ce que je sais à ce jour:Comment utiliser un conteneur IoC ?? Je ne comprends pas

  • DI me permet de construire réutilisables, unité testable composants

  • DI est bavard car il faut que je définir explicitement les dépendances (via le constructeur ou la méthode, je ne comprends toujours pas l'injection d'interface). C'est pourquoi un conteneur ou un localisateur de service est nécessaire. Le conteneur est meilleur que le localisateur de service parce que les classes n'auront pas besoin d'être conscientes de l'existence de celui-ci.

Mais je trouve ces problèmes:

  • Certaines classes sont maintenant dépendra du conteneur? Si je n'utilise pas la configuration par défaut pour chaque classe, comme décrit dans mon fichier de services, certaines classes devront appeler le conteneur pour reconfigurer l'objet nécessaire. Sur la page 79 de cette diapositive http://www.slideshare.net/fabpot/dependency-injection-with-php-53, Fabien Potencier a déclaré qu'un conteneur ne gère pas tous les objets, mais uniquement ceux avec une instance unique (mais pas des singletons). Je suis encore plus confus maintenant.

Toute aide est grandement appréciée. =)

Répondre

0

Certaines classes vont maintenant dépendre de Container?

Non. C'est pourquoi vous utilisez l'injection de dépendances plutôt que l'emplacement de service.

À la page 79 de cette diapositive ...

Voir page 82, il est dit "objets Contrairement modèles". Honnêtement je ne l'expliquerais jamais comme ça ("Objets avec une seule instance (! = Singletons)" est soit faux soit quelque chose de très spécifique à PHP, il ne s'applique pas à l'injection de dépendance ou aux conteneurs IoC + DI en général), mais je Il a parié que ce qu'il essayait d'expliquer, c'est que le conteneur gère généralement des choses ressemblant à des services, et non des choses semblables à des modèles.

+0

Si elles ne dépendent pas du conteneur, alors comment créent-elles des enfants avec des configurations autres que celles par défaut (ex: paramètres définis à l'exécution)? – HappyDeveloper

+0

@HappyDeveloper: c'est le conteneur qui fait tout le câblage et la configuration. Les classes individuelles * reçoivent * les dépendances et la configuration. –

+0

Oui, je sais, mais cela ne fonctionne que pour la création d'objets par défaut. Que se passe-t-il si, à un moment donné de l'exécution du programme (à l'intérieur de la méthode de l'enfant d'un enfant), j'ai besoin de dire une dépendance DB_Cache au lieu de File_Cache? J'ai besoin d'appeler le conteneur – HappyDeveloper

Questions connexes