J'ai lu à propos des cadres de l'inversion de contrôle et je suis tout simplement jouer avec la question suivante: « Pourquoi diable ai-je besoin d'un cadre pour le faire? » Ne pas mal compris ma question ... le modèle est quelque chose que nous les programmeurs utilisent souvent mais ... un cadre complet pour cela?Pourquoi utiliser un cadre IoC
Je dois manquer quelque chose et c'est la raison pour laquelle je pose la question. J'ai vu beaucoup d'exemples sur le web et je ne comprends pas. L'esprit mi est bloqué à l'idée peut-être.
Il suffit de jeter un oeil à l'exemple de la page Ninject Accueil:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>.To<Sword>();
}
}
La classe "Samurai" est ok pour moi. Le cadre "NinjectModule" me semble inutile.
Je suppose plus tard dans le code que nous allons créer de nouvelles instances « Samurai » en passant dans les cas « épée » à lui, quelque chose comme:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
qui pourrait être remplacé par:
Samurai theWarrior = new Samurai(new Sword());//still no coupling
ou
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
Quelle est la partie que je suis absent? Pourriez-vous s'il vous plaît parler d'un scénario où le cadre Ioc pourrait être nécessaire dans ma demande?
Merci.
mise à jour après 4 REPONSES: J'ai vraiment aimé toutes les réponses que j'ai obtenu de vous les gars. Je viens de lire ce post dependency-injection-dissection/ où le gars l'utiliser pour tester l'unité et le lien StackOverflow que vous venez de donner et Ouais, je manque le grand-grand-grande complexité partie, alors laissez-moi la coutume d'utiliser un cadre IoC. Merci encore.
Je voterais vos réponses, mais je viens de recevoir un message orange disant que je ne peux pas.
Merci au gars qui a mis en évidence le code que j'ai posté.
Je suggère de modifier votre question pour que les blocs de code blocs de code réels, soit 'mettre en évidence et en appuyant sur Ctrl-k 'ou en insérant quatre espaces devant chaque ligne de code. – jcolebrand
'new Samurai (new Sword()); // toujours pas de couplage' Il y a un couplage serré ici, vous utilisez 'new'. Quand vous refactorisez cela, vous devrez changer chaque endroit qui instancie une épée. – nos
duplicata possible de [Pourquoi ai-je besoin d'un conteneur IoC par opposition au code DI simple?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-simple-di-code) –