He estado leyendo los artículos en MSDN sobre Unity (Inyección de dependencia, Inversión de control), pero creo que necesito explicarlo en términos simples (o ejemplos simples). Estoy familiarizado con el patrón MVPC (lo usamos aquí), pero todavía no puedo entender esto de Unity, y creo que es el siguiente paso en el diseño de nuestra aplicación.
c#
dependency-injection
inversion-of-control
unity-container
Ryan Abbott
fuente
fuente
Respuestas:
La unidad es solo un "contenedor" de IoC. Google StructureMap y pruébalo en su lugar. Creo que es un poco más fácil de asimilar cuando las cosas de IoC son nuevas para ti.
Básicamente, si comprende IoC, entonces comprende que lo que está haciendo es invertir el control para cuando se crea un objeto.
Sin IoC:
Con contenedor IoC:
Sin IoC, su clase que se basa en IMyService tiene que actualizar una versión concreta del servicio para usar. Y eso es malo por varias razones (ha acoplado su clase a una versión concreta específica del IMyService, no puede probarlo fácilmente, no puede cambiarlo fácilmente, etc.)
Con un contenedor de IoC, "configura" el contenedor para resolver esas dependencias por usted. Entonces, con un esquema de inyección basado en el constructor, simplemente pasa la interfaz a la dependencia IMyService en el constructor. Cuando cree MyClass con su contenedor, su contenedor resolverá la dependencia de IMyService por usted.
Usando StructureMap, la configuración del contenedor se ve así:
Entonces, lo que ha hecho se le dice al contenedor: "Cuando alguien solicite el IMyService, entréguele una copia de SomeConcreteService". Y también ha especificado que cuando alguien solicita un MyClass, obtiene un MyClass concreto.
Eso es todo lo que un contenedor de IoC realmente hace. Pueden hacer más, pero ese es el objetivo: resuelven las dependencias por usted, por lo que no tiene que hacerlo (y no tiene que usar la palabra clave "nueva" en todo el código).
Paso final: cuando crea su MyClass, haría esto:
Espero que ayude. No dude en enviarme un correo electrónico.
fuente
Acabo de ver el Screencast de 30 minutos de inyección de dependencia de unidad de IoC de David Hayden y sentí que era una buena explicación con ejemplos. Aquí hay un fragmento de las notas del programa:
El screencast muestra varios usos comunes de Unity IoC, tales como:
fuente
Unity es una biblioteca como muchas otras que le permite obtener una instancia de un tipo solicitado sin tener que crearla usted mismo. Así dado.
Usaría una biblioteca como Unity para registrar la Calculadora que se devolverá cuando se solicite el tipo ICalculator, también conocido como IoC (Inversión de control) (este ejemplo es teórico, no técnicamente correcto).
Entonces, cuando quieres una instancia de un ICalculator, simplemente ...
Las bibliotecas de IoC generalmente se pueden configurar para contener un singleton o crear una nueva instancia cada vez que resuelva un tipo.
Ahora supongamos que tiene una clase que se basa en un ICalculator para estar presente que podría tener ...
Y puede configurar la biblioteca para inyectar un objeto en el constructor cuando se crea.
Por lo tanto, DI o inyección de dependencia significa inyectar cualquier objeto que otro pueda necesitar.
fuente
Este chico WilcoxTutorials ofrece una excelente demostración del contenedor de Unity dirigido a principiantes.
Parte 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Parte 2: http://www.youtube.com/watch?v=PsIbevgzQQE
¡En menos de media hora y comprenderá los conceptos básicos!
fuente
La unidad es un IoC. El objetivo de IoC es abstraer el cableado de dependencias entre tipos fuera de los tipos mismos. Esto tiene un par de ventajas. En primer lugar, se realiza de forma centralizada, lo que significa que no tiene que cambiar mucho código cuando cambian las dependencias (que puede ser el caso de las pruebas unitarias).
Además, si el cableado se realiza utilizando datos de configuración en lugar de código, puede volver a cablear las dependencias después de la implementación y, por lo tanto, cambiar el comportamiento de la aplicación sin cambiar el código.
fuente
MSDN tiene una Guía del desarrollador para la inyección de dependencias utilizando Unity que puede ser útil.
La Guía del desarrollador comienza con los conceptos básicos de qué es la inyección de dependencia y continúa con ejemplos de cómo usar Unity para la inyección de dependencia. A partir de febrero de 2014, la Guía del desarrollador cubre Unity 3.0, que se lanzó en abril de 2013.
fuente
Estoy cubriendo la mayoría de los ejemplos de Inyección de dependencias en ASP.NET Web API 2
En DIAutoV2Controller.cs se utiliza el mecanismo de inyección automática
En DIV2Controller.cs todo se inyectará desde la clase de resolución de configuración de dependencias
Configurar el solucionador de dependencias
fuente