En muchos artículos en toda la web, los términos Inversión de control y Principio de inversión de dependencia parecen estar mezclados y utilizados como sinónimos (las herramientas llamadas "DI-Containers" y "IoC-Containers" confunden aún más la confusión). Un artículo de Wikipedia hace un buen trabajo tratando de explicar que IoC no es lo mismo que DI:
La inversión de control (IoC) describe un diseño en el que porciones personalizadas de un programa de computadora reciben el flujo de control de una biblioteca genérica y reutilizable
Entonces, DIP se trata de hacer que sus módulos dependan de abstracciones en lugar de implementaciones concretas.
Y IoC se trata de dar control sobre el flujo de su programa a un módulo separado. Y una de las cosas que puede hacer que este módulo haga es resolver las dependencias en tiempo de ejecución.
Esta diferencia parece justa, pero nunca he visto a nadie mencionar otras aplicaciones del principio de IoC que no sean la resolución de dependencias. La definición de Wikipedia es bastante amplia, y parece que podría hacer mucho más con un módulo que tiene que puede hacer llamadas a su código personalizado en función de su configuración y algo de lógica interna.
Entonces, aquí hay algunas preguntas que aún no puedo entender:
- ¿Cuál es la relación real entre IoC y DIP? ¿IoC siempre sirve como medio para implementar DIP?
- ¿Por qué las herramientas para la resolución de dependencias se denominan contenedores DI e IoC? Esto implica que DI e IoC son lo mismo.
Nota : Esta pregunta no es un duplicado de ¿Cuál es la diferencia entre DI e IoC , porque esta última pregunta sobre la inyección de dependencia, no la inversión de dependencia?
fuente
Respuestas:
Hay un gran artículo en el sitio de Martin Fowler que tiene un capítulo específicamente sobre la diferencia entre DIP, DI e IoC . La esencia de esto (como se copió de ese sitio) es
fuente
ISomeInterface object = container.Resolve<ISomeInterface>()
es eso IoC o no?