Pregunta

Yo estaba leyendo sobre Injection por mano y Ninjection (así como ¿Por qué utilizar Ninject ). Me encontré con dos piezas de confusión:

  1. La inyección mediante la técnica de la mano ya estoy familiarizado con, pero no estoy familiarizado con Ninjection, y por lo tanto no estoy seguro de cómo el programa completo funcionaría. Quizás ayudaría a proporcionar un programa completo en lugar de, como se hace en esa página, que muestra un programa dividido en piezas

  2. Todavía no entiendo realmente cómo esto facilita las cosas. Creo que me falta algo importante. Puedo especie de ver cómo un marco de inyección sería útil si estuviera creando un grupo de inyecciones y luego cambiar entre dos grandes grupos de todos a la vez (esto es útil para burlarse, entre otras cosas), pero creo que hay más a él que eso. Pero no estoy seguro de qué. O tal vez sólo necesito más ejemplos de por qué esto es emocionante para pasar el mensaje.

¿Fue útil?

Solución

Cuando se inyecta sus dependencias sin un marco DI se termina con código de flecha en todo su solicitud diciendo clases de cómo construir sus dependencias.

    public Contact()
        : this(new DataGateWay())
    {
    }

Sin embargo, si se utiliza algo así como Ninject, todo el código flecha está en un solo lugar por lo que es más fácil cambiar una dependencia para todas las clases de usarlo.

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}

Otros consejos

  
    

Todavía no entiendo realmente cómo esto facilita las cosas. Creo que me falta algo importante.

  

¿No sería genial si sólo tuvimos que desarrollar componentes discretos, donde cada uno proporcionan funcionalidad distinta podríamos entender fácilmente, volver a usar y mantener. En el que solamente trabajaron en los componentes.

Lo que nos impide hacerlo, es que necesitamos algo de infraestructura que de alguna manera se pueden combinar y administrar estos componentes en una aplicación de trabajo automáticamente . Infraestructura que hace esto está disponible para nosotros -. Un marco COI

Así que un marco COI no es sobre gestión de dependencias o pruebas o configuración. En cambio, es sobre gestionar la complejidad, por lo que le permite sólo el trabajo y pensar en los componentes.

Se le permite probar fácilmente su código al burlarse de las interfaces que se necesita para un bloque de código en particular. También le permite cambiar fácilmente la funcionalidad sin romper otras partes del código.

Se trata de cohesión y acoplamiento.

Es probable que no ver el beneficio en proyectos pequeños, pero una vez que pasas pequeño que se vuelve muy evidente cuando se tiene que realizar cambios en el sistema. Es una brisa cuando usted ha utilizado DI.

A mi me gusta el aspecto autowiring de algunos marcos ... cuando usted no tiene que preocuparse por lo que necesitan ser instanciado sus tipos.

EDIT: He leído este artículo por Ayende @ Rahien . Y realmente apoyo su punto.

La inyección de dependencia utilizando la mayoría de los marcos se puede configurar en tiempo de ejecución, sin necesidad de recompilar.

La inyección de dependencia se puede volver muy interesante si recibe su código al punto en el que hay muy pocas dependencias en el código. Algunos marcos de inyección de dependencia le permitirá definir sus dependencias en un archivo de configuración. Esto puede ser muy útil si se necesita una pieza muy flexible de software que necesita ser cambiado sin modificar el código. Por ejemplo, el software de flujo de trabajo es un candidato ideal para este tipo de solución.

inyección de dependencia es esencial para la Componente de desarrollo impulsado por . Este último permite construir muy complejas aplicaciones de una forma mucho más eficiente y confiable.

Además, permite separar las preocupaciones transversales comunes limpiamente del otro código (esto resulta en base de código más reutilizable y flexible).

Enlaces relacionados:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top