16

Estoy tratando de entender cuándo debo usar un contenedor versus inyecciones de inyección manual. Si tengo una aplicación que usa una interfaz de 1-2 y solo tiene de 1 a 2 implementaciones concretas para cada interfaz, me inclinaría por manejar eso solo.Cuándo usar un contenedor de IOC?

Si tengo una pequeña aplicación que utiliza 2-3 interfaces y cada interfaz tiene 2-3 implementaciones concretas, ¿debería usar un contenedor completo? ¿Sería suficiente algo tan simple como this?

Básicamente estoy tratando de entender cuándo es apropiado manejar manualmente estas dependencias, cuándo (o si) debo usar algo simple como el anterior, y cuándo usar un contenedor IOC como Ninject, Windsor, etc ... . Puede que no sea apropiado poner un número en algo como esto, pero ¿cómo puedo decir que es hora de usar un contenedor de IOC?

+0

http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code –

+0

No estoy preguntando por qué debería usar uno, estoy preguntando cuándo debería usar uno. Ya conozco los beneficios, pero no estoy seguro de cuándo es el momento adecuado para usar uno. – nivlam

Respuesta

14

Lo importante a tener en cuenta aquí es que puede (y debe) escribir su código de una manera DI-friendly, but container-agnostic.

Esto significa que siempre debe empujar la composición de las dependencias a un punto en el que no pueda posponerlo más. Esto se llama Composition Root y a menudo se coloca cerca del punto de entrada de la aplicación.

Si diseña su aplicación de esta manera, su elección de DI Container (o no DI Container) gira en torno a un solo lugar en su aplicación, y puede cambiar rápidamente de estrategia.

Puede optar por utilizar DIpobre hombre si sólo tiene unas pocas dependencias, o puede optar por utilizar un DI de contenedores en toda regla. Utilizado de esta manera, no tendrá ninguna dependencia en ningún contenedor DI particular, por lo que la elección se vuelve menos crucial en términos de capacidad de mantenimiento.

A DI Container lo ayuda a administrar la complextitud, incluida la duración del objeto. Usado como se describe aquí, no hace nada que no pueda escribir a mano, pero lo hace mejor y más sucintamente. Como tal, mi umbral para cuándo comenzar a usar un Contenedor DI sería bastante bajo.

Empezaría a usar un Contenedor DI una vez que haya pasado algunas dependencias. Most of them are pretty easy to get started with anyway.


Actualización: Mi November 2012 answer to that question.

Cuestiones relacionadas