Looking for asp.net-mvc Answers? Try Ask4KnowledgeBase
Looking for asp.net-mvc Keywords? Try Ask4Keywords

asp.net-mvcInyección de dependencia


Observaciones

Todo el punto de la inyección de dependencia (DI) es reducir el acoplamiento de código. Imagine cualquier tipo de interacción que implique la creación de algo como en el "Ejemplo de dependencia de código duro".

Una gran parte de escribir código es la capacidad de probarlo. Cada vez que creamos una nueva dependencia, hacemos que nuestro código sea difícil de probar porque no tenemos control sobre esa dependencia.

¿Cómo probaría el código que depende de DataTime.Now por ejemplo? Siempre cambia así que no tienes referencia. Esto es cuando se inyecta un parámetro estable como su punto de partida. Puede controlarlo, puede escribir pruebas basadas en varios valores y asegurarse de que siempre obtenga el resultado correcto.

Por lo tanto, una buena opción es pasar una interfaz o una clase abstracta como un parámetro en el constructor DI.

Una interfaz representa un contrato bien definido, siempre puede confiar en los métodos para estar allí y siempre puede confiar en las firmas del método.

Una vez que empieces a usar DI se abrirán otros aspectos. Por ejemplo, incluso si pasa una interfaz en algún momento, necesitará una implementación real para realizar cualquier trabajo. Aquí es donde aparecen otros conceptos. Podemos usar IOC (Inversión de control) para resolver nuestras dependencias. Esto significa que le indicamos a nuestro código que siempre use una implementación específica para cualquier contrato. Por supuesto que hay otras formas de hacer esto. Siempre podríamos crear una instancia de cada contrato con una implementación específica y, a partir de ese momento, nuestro código puede usar esa parte:

public ILogging Logging { get; set }

En algún momento lo inicializamos.

Logging = new FileLogging();

esto siempre funcionará siempre y cuando nuestra clase cumpla con el contrato esperado:

public class FileLogging : ILogging

a partir del momento de inicialización siempre utilizamos el objeto de registro. Esto hace la vida más fácil porque si alguna vez decidimos cambiar y usar un DatabaseLogging, por ejemplo, solo tenemos que cambiar el código en un lugar y aquí es exactamente donde inicializamos la clase de registro.

¿Es DI solo bueno para la prueba? No, DI también es importante al escribir código mantenible. Permite que la separación de inquietudes sea clara.

Cuando escriba cualquier código, piense ... es comprobable, puedo escribir una prueba, es cuando se inyecta un valor DateTime en lugar de usar DateTime. Ahora tiene sentido.

Inyección de dependencia Ejemplos relacionados