Skip to content

Service Collection

Esta clase proporciona métodos de extensión para configurar e integrar fácilmente los servicios de Redis Pub/Sub en una aplicación .NET utilizando IServiceCollection. Facilita la configuración, validación y registro de los servicios necesarios para utilizar Redis Pub/Sub como mecanismo de mensajería.

namespace CodeDesignPlus.Net.Redis.PubSub.Extensions;
/// <summary>
/// Extension methods for setting up Redis Pub/Sub services in an <see cref="IServiceCollection"/>.
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds Redis Pub/Sub services to the specified <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
/// <param name="configuration">The configuration to bind the Redis Pub/Sub options.</param>
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="services"/> or <paramref name="configuration"/> is null.</exception>
/// <exception cref="RedisPubSubException">Thrown if the Redis Pub/Sub configuration section does not exist.</exception>
public static IServiceCollection AddRedisPubSub(this IServiceCollection services, IConfiguration configuration)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configuration);
var section = configuration.GetSection(RedisPubSubOptions.Section);
if (!section.Exists())
throw new RedisPubSubException($"The section {RedisPubSubOptions.Section} is required.");
services
.AddOptions<RedisPubSubOptions>()
.Bind(section)
.ValidateDataAnnotations();
var options = section.Get<RedisPubSubOptions>();
if (options.Enable)
{
services.AddRedis(configuration);
services.AddPubSub(configuration, x =>
{
x.UseQueue = options.UseQueue;
x.EnableDiagnostic = options.EnableDiagnostic;
x.RegisterAutomaticHandlers = options.RegisterAutomaticHandlers;
x.SecondsWaitQueue = options.SecondsWaitQueue;
});
services.TryAddSingleton<IMessage, RedisPubSubService>();
services.TryAddSingleton<IRedisPubSub, RedisPubSubService>();
}
return services;
}
}

Dependencias y Requisitos Previos


  • Microsoft.Extensions.DependencyInjection: Necesario para la interfaz IServiceCollection.
  • Microsoft.Extensions.Configuration: Necesario para la interfaz IConfiguration.
  • Microsoft.Extensions.Options: Necesario para la configuración de opciones.
  • CodeDesignPlus.Net.Redis: Necesario para agregar los servicios de Redis.
  • CodeDesignPlus.Net.PubSub: Necesario para agregar los servicios de Pub/Sub.

Escenarios de uso


Este método de extensión es particularmente útil en aplicaciones que:

  • Utilizan Redis como base de datos o caché y desean incorporar un sistema de mensajería Pub/Sub.
  • Requieren desacoplar componentes a través de un sistema de mensajería.
  • Buscan una forma sencilla y estandarizada de configurar Redis Pub/Sub mediante configuración.
  • Necesitan un registro automático de handlers de mensajeria.

Beneficios


  • Configuración Centralizada: Permite configurar Redis Pub/Sub a través del archivo appsettings.json, centralizando la configuración y facilitando su gestión.
  • Facilidad de Integración: Simplifica la incorporación de Redis Pub/Sub en la aplicación con una única llamada al método de extensión.
  • Validación de Configuración: Valida automáticamente la configuración de Redis Pub/Sub al inicio de la aplicación, reduciendo errores en tiempo de ejecución.
  • Registro Automático: Permite el registro automático de handlers para los mensajes, reduciendo la necesidad de configuraciones manuales.

Métodos de extensión


La clase ServiceCollectionExtensions proporciona un único método de extensión para configurar Redis Pub/Sub en una aplicación .NET. Este método agrega los servicios necesarios para utilizar Redis Pub/Sub y valida la configuración de la aplicación.

AddRedisPubSub

Type: public static IServiceCollection AddRedisPubSub(this IServiceCollection services, IConfiguration configuration)

Agrega los servicios de Redis Pub/Sub al IServiceCollection especificado.

  • Parámetros

    • services: El IServiceCollection al que se agregarán los servicios.
    • configuration: La configuración utilizada para enlazar las opciones de Redis Pub/Sub.
  • Tipo de retorno

    • IServiceCollection: El IServiceCollection modificado, permitiendo el encadenamiento de llamadas a otros métodos de configuración.
  • Excepciones

    • ArgumentNullException: Se lanza si services o configuration son null.
    • RedisPubSubException: Se lanza si la sección de configuración RedisPubSub no existe.
  • Ejemplo de uso

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddRedisPubSub(builder.Configuration);

Conclusiones


El método de extensión AddRedisPubSub es una herramienta poderosa para facilitar la integración y configuración de Redis Pub/Sub en aplicaciones .NET. Permite configurar Redis Pub/Sub de forma rápida y centralizada, utilizando la configuración de la aplicación y proporciona una forma sencilla de registrar los servicios necesarios.

Referencias