En el nuevo ASP.NET Core, se utilizan un gran número de inyecciones de dependencias para escribir código.
Por ejemplo, en nuestra clase de Startup, podemos ver lo siguiente:
AddMvc AddDbContext incluye el AddDirectoryBrowser que usábamos para los recorridos de directorios antes:
Todos son marcos que ofrecen buenos servicios, y podemos usarlos directamente inyectándolos.
La inversión de control (IoC) es un principio de diseño en programación orientada a objetos que puede utilizarse para reducir el acoplamiento entre el código informático. El método más común se llama Inyección de Dependencias (DI), y también existe un método llamado "Consulta de Dependencias". Al controlar la inversión, cuando se crea un objeto, una entidad externa que controla todos los objetos del sistema le pasa una referencia al objeto del que depende. También se puede decir que se inyectan dependencias en el objeto. Para usar el ioc, la clase Startup necesita referenciar Microsoft.Extensions.DependencyInjection(ps, que ya es bastante sencillo: Microsoft.. Expandir... Inyección de dependencias - - ,)
Inyectar el ciclo de vida de un servicio
Microsoft ofrece 3 ciclos de vida para servicios autoinyectados.
Transitorio
Un servicio instantáneo de ciclo de vida que se crea cada vez que se solicita. Este ciclo de vida es más adecuado para servicios ligeros y sin estado.
Alcance
En el mismo ámbito, el servicio se crea solo una vez por solicitud.
Singleton (Solo)
El global solo se crea una vez, la primera vez que se solicita, y luego siempre se utiliza.
¿Cómo se utilizan estos tres ciclos de vida? Podemos usar diferentes métodos directamente al inyectarlo, el código es el siguiente:
Probemos la generación específica de estos tres ciclos de vida
Escribimos tres interfaces con nombres diferentes y 3 clases distintas para implementar las interfaces, de la siguiente manera:
En el constructor de cada clase de implementación, generamos un nuevo GUID, que nos permite determinar si la clase ha reejecutado el constructor.
Inyectar servicios en el controlador
Generalmente existen tres formas de inyección: inyección por constructor, inyección por método e inyección de atributos. El contenedor IOC de Microsoft utiliza por defecto la inyección de constructores (No se admite la inyección de atributos, pero puede lograrse con un reemplazo de contenedor de terceros)
Ver código de la página:
Ejecuta el proyecto y accede a él a través de 2 navegadores diferentes, como se muestra a continuación:
Descubrimos que los GUIDs generados dos veces en el ciclo de vida instantáneo son inconsistentes, lo que indica que el objeto no es el mismo.
Sin embargo, el ciclo de vida del alcance es el mismo, porque bajo el mismo ámbito, el GUID del servicio usado dos veces en el mismo navegador es el mismo, lo que indica que se utiliza el mismo objeto.
En el caso de un singleton, dos navegadores diferentes acceden siempre al mismo GUID, lo que indica que se está llamando al mismo objeto.
(Fin)
|