8- Inyección de Dependencias - Grafos - Inversión de Controles | Programando en ASP.NET Core 2
Автор: Felipe Gavilan Programa
Загружено: 2018-02-14
Просмотров: 15016
Github: https://github.com/gavilanch/dotnet-c...
ASP.NET Core nos permite manejar la inyección de dependencias de una manera muy sencilla, sin tener que auxiliarnos en librerias de terceros para esto. Vamos a profundizar en el tema de inyeccion de dependencias. Empezaremos con una definicion. La inyeccion de dependencias Es un patron en el cual una clase recibe las instancias de objetos que necesita de una fuente externa en vez de crearlas él mismo. En código esto se ve de la siguiente manera, si tenemos una clase A, la cual utiliza una clase B, decimos que la clase A tiene una dependencia de la clase B, si la clase A instancia la clase B, entonces estamos atados a esta implementacion de la clase B, en cambio, si utilizamos inyección de dependencias, la clase A indicaría la dependencia a través de una interfaz, por ejemplo, en su constructor, y entonces, si una clase C quiere utilizar la clase A, entonces debe pasarle una implementación de la clase B.
La inyección de dependencias tiene varias ventajas, entre las que podemos destacar:
Nos permite tener una arquitectura desacoplada. La idea es que nuestras clases van a depender de interfaces, y no de implementaciones, esto hace que sea más fácil adherirnos a principios de programación como el principio de responsabilidad única.
Podemos utilizar una factoría para emitir instanciaciones de clases, esto ayuda a resolver arboles de dependencia de una manera simple
Realizar pruebas unitarias donde realmente solamente probemos una clase de manera independiente de sus dependencias se hace posible.
Entonces, si las clases no instancian sus dependencias, entonces, ¿Quién instancia las dependencias? Normalmente, para eso utilizamos un Contenedor de inversion de controles, o contenedor simplemente, un contenedor es una factoria la cual es responsable de proveer las instancias de los tipos los cuales le pedimos. Esto quiere decir que es responsabilidad del contenedor resolver las dependencias que tienen las clases que queramos utilizar. Lo que hacemos es registrar al inicio de nuestra aplicacion dichas dependencias en el contenedor.
Hace un momento mencionamos la idea de un arbol de dependencia. Resolver Un arbol de dependencia, tambien conocido como grafo del objeto, es cuando queremos crear un objeto, y todas sus dependencias, y las dependencias de esas dependencias. Veremos un ejemplo de un arbol de dependencias en unos minutos.
Ahora debemos hablar del ciclo de vida de los objetos que viven en nuestro contenedor, es decir, ¿Qué tiempo vive un objeto que es servido a traves de un contenedor? Existen 3 ciclos de vida básicos los cuales podemos utilizar para servir objetos desde nuestro contenedor:
Transient o transitorio: Es cuando queremos servir una nueva instancia cada vez que aparece como dependencia
Scoped: Es cuando queremos servir la misma instancia dentro del mismo contexto de una petición HTTP, pero diferente entre distintos contextos HTTP.
Singleton o de instancia unica: Es cuando queremos servir la misma instancia siempre.
Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: