J'ai une classe qui a des dépendances que j'ai branchées avec Ninject. Dans l'implémentation réelle, j'utilise l'injection de propriété, mais pour illustrer rapidement, je vais injecter sur le terrain. Si je comprends bien, au lieu des instances Newing de MyObject, afin d'obtenir les dépendances soient correctement injectés, je dois utiliserCréation de noyau Ninject dans une bibliothèque de classes
kernel.Get<MyObject>()
La chose que je suis trébuchant sur est cependant que MyObject ne sera utilisé que dans le contexte d'une bibliothèque de classes. L'intention est que les applications finales créent leurs propres modules et les transmettent à une instance de noyau pour s'hydrater. Compte tenu de cela, quelle est généralement la manière la plus pragmatique d'approcher une instance générique d'un noyau Ninject dans ma bibliothèque de classes pour que les instances de MyObject (et d'autres cas similaires) puissent être hydratées? Ma première inclination est une sorte d'usine qui internalise un noyau singleton - que les applications elles-mêmes doivent hydrater/initialiser en chargeant un module.
Ainsi, dans RandomService.cs
var myKernel = NinjaFactory.Unleash();
var myobj = myKernel.Get<MyObject>();
myobj.foo();
Avant d'aller trop loin dans cette voie cependant, je dois faire une vérification de bon sens pour vous assurer que la pensée est saine ou qu'il n'y a pas un autre évident chose que je manque. Je suis évidemment nouveau à IoC et j'ai l'impression d'avoir les bases, mais pas forcément les meilleures façons de l'utiliser.
Heureusement, c'est un lib interne (dans un sens corporatif) donc j'ai un public captif - d'autres développeurs de mon équipe, en utilisant un outil standard. Maintenant, chaque dev peut avoir des liaisons différentes qu'ils veulent, d'où mon problème initial. Re: ctor vs injection prop, prop semble certainement avoir beaucoup de cruft je dois écrire, mais je m'inquiète de la liste de dépendance croissante au fil du temps et donc les appels ctor. Y a-t-il d'autres inconvénients à l'injection d'accessoires que je devrais surveiller? – bakasan
Même avec une application interne, je suivrais toujours les mêmes principes car ils conduisent à un code plus propre avec une meilleure séparation des préoccupations. Il existe de nombreux problèmes potentiels avec Property Injection, notamment la protection des invariants (la dépendance est-elle nulle?), Le remplacement à chaud de la dépendance injectée (probablement pas quelque chose que vous voulez faire) et une API plus vague en général. –
Oh, et juste pour être à l'avant et explicite à ce sujet: Je considère Service Locator un anti-pattern: http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx –