He estado leyendo acerca de los frameworks de Inversion of Control y estoy jugando con la pregunta: "¿Por qué demonios necesito un framework para hacer esto?"Por qué usar un framework IoC
No entendí mal mi pregunta ... el patrón es algo que los programadores usamos a menudo pero ... ¿un marco completo para hacer eso?
Me falta algo y esa es la razón por la que estoy publicando la pregunta. He visto muchos ejemplos en la web y simplemente no lo entiendo. mi mente está bloqueada a la idea tal vez.
Basta con echar un vistazo a el ejemplo de la página de inicio de Ninject:
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 clase "Samurai" está bien para mí. El marco "NinjectModule" me parece innecesario.
Asumo adelante en el código que vamos a crear nuevas instancias "Samurai" que pasan en los casos "espada" a él, algo así como:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
que podrían sustituirse por:
Samurai theWarrior = new Samurai(new Sword());//still no coupling
o
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
lo que es la parte que me falta? ¿Podría hablarnos de algún escenario en el que IOC Framework podría ser necesario en mi aplicación?
Gracias.
ACTUALIZAR DESPUÉS DE 4 RESPUESTAS: Me gustaron todas las respuestas que obtuve de ustedes. Acabo de leer esta publicación dependency-injection-dissection/ donde el chico la usa para Unit Testing y el enlace StackOverflow que acabas de proporcionar. Sí, me faltaba la parte de la complejidad grande y grande, así que permítame personalizar el uso de un framework IoC. Gracias de nuevo.
Yo votaría sus respuestas, pero acabo de recibir un mensaje naranja que dice que no puedo.
Gracias al hombre que destacó el código que publiqué.
que sugeriría la edición de su pregunta para que los bloques de código bloques de código reales, ya sea por 'resaltando y pulsando Ctrl-k 'o insertando cuatro espacios delante de cada línea de código. – jcolebrand
'nuevo Samurai (nueva espada()); // aún no hay acoplamiento 'Hay un acoplamiento fuerte aquí, usa' nuevo'. Cuando refactorices eso, tendrás que cambiar cada lugar que crea una espada. – nos
posible duplicado de [¿Por qué necesito un contenedor IoC en lugar de un código DI directo?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-straight-forward-di-code) –