L'Injection de dépendance vs Emplacement de Service

Je suis actuellement en pesant les avantages et les inconvénients entre DI et SL. Cependant, j'ai trouvé moi-même dans la suite de catch 22 qui implique que je dois utiliser SL pour tout, et seulement injecter un conteneur IoC dans chaque classe.

DI Catch 22:

Certaines dépendances, à l'instar de Log4Net, il suffit de ne pas convenir à DI. J'appelle ces méta-dépendances et sentent qu'ils doivent être opaques pour le code appelant. Ma justification étant que si une simple classe " D " a été initialement mis en œuvre sans l'enregistrement, puis pousse à besoin de se connecter, alors dépendante des classes 'A', 'B' et 'C' doit maintenant en quelque sorte obtenir cette dépendance et de la transmettre à partir de " A " à " D " (en supposant que 'A' compose 'B', 'B' compose 'C', et ainsi de suite). Maintenant, nous avons apporté d'importantes modifications de code, juste parce que nous avons besoin de se connecter dans une classe.

Nous avons donc besoin d'un opaque mécanisme pour obtenir des méta-dépendances. Deux me viennent à l'esprit: Singleton et SL. L'ancien a connu des limites, principalement en ce qui concerne rigide de délimitation de l'étendue de ses capacités, au mieux, un Singleton utilisera un Résumé de l'Usine qui est stocké à la portée de l'application (c'est à dire. dans une variable statique). Cela permet une certaine souplesse, mais n'est pas parfait.

Une meilleure solution serait d'injecter un conteneur IoC dans de telles classes, et ensuite utiliser SL depuis l'intérieur de la classe pour résoudre ces méta-dépendances à partir du conteneur.

Donc catch 22: parce que la classe est maintenant injecté avec un conteneur IoC, alors pourquoi ne pas l'utiliser pour résoudre toutes les autres dépendances de trop?

J'apprécierais vos pensées 🙂

  • Votre commentaire sur la nécessité de passer d'Une->B->C->D suggère que vous êtes confus au moment de l'exécution et le temps de création. Voir misko.hevery.com/2009/03/30/collaborator-vs-the-factory/...
  • Grand commentaire WW, qui a honnêtement aidé à rectifier un gros blocage psychologique, j'ai eu re DI.
  • À mon humble avis l'emplacement de service est pauvre homme d'inversion de contrôle, il vous donne une partie des avantages d'une bonne Cio, mais en n'étant pas explicite défaites beaucoup de ses avantages. L'injection de dépendance est où son à la.