Service Collection
Esta clase proporciona métodos de extensión para la interfaz IServiceCollection
que facilitan la configuración y registro de los servicios Redis en una aplicación .NET, centralizando la inyección de dependencias y la configuración de opciones. El objetivo principal es simplificar el proceso de integración de Redis en aplicaciones .NET, promoviendo la reutilización de configuraciones y la coherencia en el acceso a Redis.
Dependencias y Requisitos Previos
Microsoft.Extensions.DependencyInjection
: Necesario para la interfazIServiceCollection
.Microsoft.Extensions.Configuration
: Necesario para la interfazIConfiguration
.Microsoft.Extensions.Options
: Necesario para la configuración de opciones.
Escenarios de uso
Este método de extensión es particularmente útil en aplicaciones que:
- Utilizan Redis como caché, almacenamiento de sesiones o broker de mensajes.
- Requieren una configuración centralizada y reutilizable de los servicios Redis.
- Necesitan inyectar dependencias de servicios Redis en diferentes partes de la aplicación.
- Siguen el patrón de inyección de dependencias para desacoplar componentes.
- Desean configurar la conexión a Redis desde la configuración de la aplicación (appsettings.json, variables de entorno, etc.).
Beneficios
- Configuración Simplificada: Facilita la configuración de los servicios Redis utilizando la configuración de la aplicación.
- Inyección de Dependencias: Permite la inyección sencilla de las interfaces
IRedis
eIRedisFactory
en cualquier parte de la aplicación. - Centralización de la configuración: Asegura que todas las conexiones a Redis sean configuradas de la misma manera.
- Reutilización de código: Evita la necesidad de repetir la configuración de Redis en múltiples partes de la aplicación.
Ejemplo Práctico
En este ejemplo, se utiliza el método AddRedis
para configurar los servicios Redis, tomando la configuración de la aplicación (Configuration
). Esto permite que IRedis
e IRedisFactory
estén disponibles para ser inyectadas como dependencias.
-
Asignamos las configuraciones en el archivo
appsettings.json
:{"Core": {"Business": "CodeDesignPlus","AppName": "sample-redis-standalone","Version": "v1","Description": "Sample of CodeDesignPlus.Net.Core","Contact": {"Name": "CodeDesignPlus","Email": "custom@outlook.com"}},"Redis": {"Instances": {"Core": {"ConnectionString": "localhost:6379"}}}}{"Core": {"Business": "CodeDesignPlus","AppName": "sample-redis-standalone-tls","Version": "v1","Description": "Sample of CodeDesignPlus.Net.Core","Contact": {"Name": "CodeDesignPlus","Email": "custom@outlook.com"}},"Redis": {"Instances": {"Core": {"ConnectionString": "localhost:6380,ssl=true,password=12345678,resolveDns=false,sslprotocols=tls12|tls13","Certificate": "server/Certificates/client.pfx","PasswordCertificate": "Temporal1"}}}}{"Core": {"Business": "CodeDesignPlus","AppName": "sample-redis-cluster","Version": "v1","Description": "Sample of CodeDesignPlus.Net.Core","Contact": {"Name": "CodeDesignPlus","Email": "custom@outlook.com"}},"Redis": {"Instances": {"Core": {"ConnectionString": "redis-node-1:7000,redis-node-2:7001,redis-node-3:7002,redis-node-4:7003,redis-node-5:7004,redis-node-6:7005,password=12345678,abortConnect=false"}}}}{"Core": {"Business": "CodeDesignPlus","AppName": "sample-redis-cluster-tls","Version": "v1","Description": "Sample of CodeDesignPlus.Net.Core","Contact": {"Name": "CodeDesignPlus","Email": "custom@outlook.com"}},"Redis": {"Instances": {"Core": {"ConnectionString": "redis0:7379,redis1:7380,redis2:7381,redis3:7382,redis4:7383,redis5:7384,ssl=true,password=12345678,resolveDns=false,sslprotocols=tls12|tls13","Certificate": "server/Certificates/client.pfx","PasswordCertificate": "Temporal1"}}}} -
Usamos el método
AddRedis
en el archivoStartup.cs
oProgram.cs
para configurar los servicios Redis:// En tu archivo Startup.cs o Program.cspublic void ConfigureServices(IServiceCollection services){// ...services.AddRedis(Configuration);}
Métodos de extensión
ServiceCollectionExtensions
proporciona los siguientes métodos de extensión para configurar y registrar servicios relacionados con MongoDB en una aplicación .NET.
AddRedis
Type: public static IServiceCollection AddRedis(this IServiceCollection services, IConfiguration configuration)
Este método extiende la interfaz IServiceCollection
para configurar los servicios Redis en la aplicación, utilizando la configuración de la aplicación para obtener las opciones de Redis.
-
Parámetros:
services
: () La colección de servicios a la cual agregar los servicios Redis. No puede ser nulo. configuration
: () La configuración de la aplicación desde donde se obtendrán las opciones de Redis. No puede ser nulo.
-
Tipo de retorno:
- (
) La misma colección de servicios para permitir el encadenamiento de llamadas a otros métodos de extensión.
- (
-
Excepciones:
ArgumentNullException
: Se lanza siservices
oconfiguration
son nulos.Exceptions.RedisException
: Se lanza si la sección de configuraciónRedisOptions.Section
(por defecto “Redis”) no existe en la configuración.
Descripción detallada
Este método extiende la interfaz IServiceCollection
para configurar los servicios Redis en la aplicación. Realiza los siguientes pasos:
- Validación de argumentos: Se asegura de que los parámetros
services
yconfiguration
no sean nulos. - Obtención de la configuración: Obtiene la sección de configuración de Redis (por defecto “Redis”) desde la configuración de la aplicación. Si la sección no existe, lanza una excepción
Exceptions.RedisException
. - Registro de opciones: Registra las opciones de configuración de Redis utilizando la clase
RedisOptions
y las enlaza a la sección de configuración obtenida. - Registro de servicios: Registra las interfaces
IRedis
eIRedisFactory
como singletons, permitiendo que se puedan inyectar como dependencias. - Registro de conexión: Registra la conexión creada mediante
IRedisFactory
con un scope Singleton. - Retorno de la colección: Retorna la colección de servicios para permitir el encadenamiento de otras configuraciones.
Conclusiones
El método AddRedis
facilita la integración de Redis en aplicaciones .NET, proporcionando una forma estandarizada de configuración e inyección de dependencias. Al utilizar este método, los desarrolladores pueden centralizar la configuración de Redis, reduciendo la complejidad y mejorando la mantenibilidad del código. Asegúrate de que la sección de configuración de Redis exista y esté correctamente configurada.