En la página de Wikipedia sobre inyección de dependencias, la sección de desventajas nos dice esto:
La inyección de dependencia aumenta el acoplamiento al requerir que el usuario de un subsistema satisfaga las necesidades de ese subsistema.
con un enlace a un artículo contra la inyección de dependencia .
La inyección de dependencia hace que una clase use la interfaz en lugar de la implementación concreta. Eso debería resultar en una disminución del acoplamiento , ¿no?
¿Qué me estoy perdiendo? ¿Cómo aumenta la inyección de dependencia el acoplamiento entre clases?
dependency-injection
coupling
BЈовић
fuente
fuente

Respuestas:
La inyección de dependencia disminuye el acoplamiento entre una clase y su dependencia. Pero aumenta el acoplamiento entre una clase y su consumidor (ya que el consumidor necesita más información para crearlo) y la dependencia y su consumidor (ya que el consumidor necesita saber la dependencia a utilizar).
Muy a menudo, esta es una buena compensación. La clase no debería conocer los detalles sobre sus dependencias más allá de una interfaz, y debería ser responsabilidad de la aplicación vincular bits específicos de código.
fuente
Supongamos que tiene un subsistema
Sque depende de una conexión de base de datosD. Sin inyección de dependencia, existe un acoplamiento relativamente estrecho entreSyD, porqueSnecesita saber cómo usarloDy cómo crearlo. El resto del sistema, sin embargo, puede ser felizmente inconsciente de esta dependencia entreSyD.Con la inyección de dependencia, el acoplamiento entre
Sy seDvuelve más flojo, porque elimina delSconocimiento cómo crear unD.Ssolo necesita saber cómo usarlo. El mayor acoplamiento general proviene del hecho de que otras partes del sistema ahora necesitan saberDy posiblemente cómo crear uno. El alcance de este aumento en el acoplamiento depende de cómoDse inyecte la dependencia enS:Snecesita una dependenciaDy posiblemente el conocimiento de cómo crear una.Stravés del cualDse inyecta necesita una dependenciaDy posiblemente el conocimiento de cómo crear uno.En cualquier caso, el número de clases que depende de los
Daumentos y el conocimiento de cómo crear unDtodavía debe estar presente en algún lugar del sistema. Esto crea un aumento general del acoplamiento.fuente
Snecesidades debe suministrar una fábrica deD, lo que significa que necesita saber quéSusosD(o al menos alguna interfaz de la misma).Estoy totalmente en desacuerdo con que aumenta el acoplamiento.
Sin inyección de dependencia, tiene un acoplamiento estrecho entre un subsistema y la implementación concreta de la dependencia.
Con la inyección de dependencia ha desacoplado el subsistema de la implementación de la dependencia.
Hacer el argumento de que aumenta el acoplamiento entre el consumidor y este subsistema es MUY cuestionable, ya que implica que el consumidor ahora está estrechamente vinculado a la dependencia requerida por el subsistema. Todo lo que significa es que está escribiendo un código estrechamente acoplado que une a su consumidor con la dependencia. Idealmente TODO su código está desacoplado.
Inyección de constructor:
La resolución de dependencia es manejada por un contenedor de inyección de dependencia o una fábrica. El consumidor puede obtener una implementación concreta del subsistema desde el contenedor de inyección de dependencia o una fábrica.
El consumidor no necesita saber cómo se ve el constructor del subsistema. No hay acoplamiento a la dependencia del subsistema.
Método de inyección:
Lo mismo que la inyección del constructor, excepto que ahora el consumidor necesita obtener una instancia concreta de la dependencia del contenedor o la fábrica (o incluso hacer que se inyecte el método / constructor) e inyectarlo en el método. Nuevamente, el consumidor no está acoplado a una implementación concreta de la dependencia.
TL; DR El peor caso para la inyección de dependencia en un subsistema es que el acoplamiento se cambia al código del consumidor. NO HAY UN INCREMENTO TOTAL EN EL ACOPLAMIENTO.
El mejor de los casos es que todos los sistemas ahora están acoplados libremente y la inyección de dependencia se controla a través de contenedores o fábricas de inyección de dependencia.
fuente