Skip to content

Service Collection

La librería CodeDesignPlus.Net.Event.Sourcing proporciona métodos de extensión para configurar y utilizar los servicios de Event Sourcing en aplicaciones .NET. Estos métodos se integran con el contenedor de dependencias de .NET, simplificando la configuración y uso del patrón Event Sourcing.

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.Event.Sourcing: La librería principal de Event Sourcing que contiene las clases base y servicios.

Escenarios de uso


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

  • Implementan el patrón de Event Sourcing como base de su arquitectura.
  • Necesitan una forma estandarizada de configurar y usar los servicios de Event Sourcing.
  • Desean utilizar la inyección de dependencias para gestionar los servicios de Event Sourcing.
  • Quieren tener un control granular sobre las opciones de Event Sourcing, como el sufijo de snapshots o la frecuencia de snapshots.
  • Requieren integrarse con diferentes configuraciones mediante IConfiguration.

Beneficios


  • Configuración Sencilla: Facilita la configuración de los servicios de Event Sourcing, reduciendo la cantidad de código necesario.
  • Inyección de Dependencias: Permite utilizar la inyección de dependencias para acceder a los servicios de Event Sourcing en la aplicación.
  • Flexibilidad: Permite personalizar las opciones de Event Sourcing mediante un objeto de configuración.
  • Validación de Configuración: La extensión valida las opciones de configuración definidas en el archivo de configuración.
  • Integración: Facilita la integración de la librería de Event Sourcing en cualquier proyecto .NET que utilice IServiceCollection.

Ejemplo Práctico


Supongamos que tienes un archivo appsettings.json con la siguiente configuración:

{
"Core": {
"Business": "CodeDesignPlus",
"AppName": "sample-event-sourcing",
"Version": "v1",
"Description": "Sample of CodeDesignPlus.Net.Core",
"Contact": {
"Name": "CodeDesignPlus",
"Email": "custom@outlook.com"
}
},
"EventSourcing": {
"MainName": "aggregate",
"SnapshotSuffix": "snapshot",
"FrequencySnapshot": 20
}
}

Y quieres configurar los servicios de Event Sourcing en tu aplicación. Así podrías hacerlo en tu clase Startup o Program.cs:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using CodeDesignPlus.Net.Event.Sourcing.Extensions;
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
// Usando la configuración del archivo appsettings.json
services.AddEventSourcing(Configuration);
// Opcionalmente, puedes personalizar las opciones programáticamente
services.AddEventSourcing(Configuration, options =>
{
options.SnapshotSuffix = "customSnapshot";
options.FrequencySnapshot = 50;
});
}
public void Configure(IApplicationBuilder app)
{
// ... Configuración de la aplicación ...
}
}

Métodos de extensión


La librería CodeDesignPlus.Net.Event.Sourcing proporciona dos métodos de extensión para configurar los servicios de Event Sourcing en una aplicación .NET. Ambos métodos permiten configurar los servicios de Event Sourcing a través de un archivo appsettings.json y personalizar las opciones programáticamente. A continuación se describen los métodos de extensión disponibles:

AddEventSourcing

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

Este método agrega los servicios de Event Sourcing a la colección de servicios especificada utilizando la configuración proporcionada.

  • Parámetros

    • services: La colección de servicios (IServiceCollection) a la que se agregarán los servicios de Event Sourcing.
    • configuration: La configuración (IConfiguration) que se utilizará para configurar los servicios de Event Sourcing. La sección “EventSourcing” debe existir en la configuración.
  • Tipo de retorno

    • IServiceCollection: La colección de servicios modificada, lo que permite encadenar otras llamadas de extensión.
  • Excepciones

    • ArgumentNullException: Se lanza si services o configuration son nulos.
    • EventSourcingException: Se lanza si la sección de configuración EventSourcing no existe.
  • Ejemplo de Uso

    public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
    {
    services.AddEventSourcing(configuration);
    }

AddEventSourcing (sobrecarga)

Type: public static IServiceCollection AddEventSourcing(this IServiceCollection services, IConfiguration configuration, Action<EventSourcingOptions> setupOptions)

Este método agrega los servicios de Event Sourcing a la colección de servicios especificada, utilizando la configuración proporcionada y una acción para personalizar las opciones.

  • Parámetros

    • services: La colección de servicios (IServiceCollection) a la que se agregarán los servicios de Event Sourcing.
    • configuration: La configuración (IConfiguration) que se utilizará para configurar los servicios de Event Sourcing.
    • setupOptions: Una acción (Action<EventSourcingOptions>) para configurar las opciones de Event Sourcing de manera programática.
  • Tipo de retorno

    • IServiceCollection: La colección de servicios modificada, lo que permite encadenar otras llamadas de extensión.
  • Excepciones

    • ArgumentNullException: Se lanza si services, configuration o setupOptions son nulos.
  • Ejemplo de Uso

    public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
    {
    services.AddEventSourcing(configuration, options =>
    {
    options.SnapshotSuffix = "mySnapshot";
    options.FrequencySnapshot = 50;
    });
    }

Conclusiones


Los métodos de extensión AddEventSourcing simplifican significativamente la configuración de los servicios de Event Sourcing en aplicaciones .NET. Permiten la configuración a través de archivos appsettings.json y personalización programática a través de un Action, lo que ofrece gran flexibilidad y control. Se recomienda siempre tener una configuración base en el appsettings.json, y sólo usar el método con el Action para sobreescribir la configuración si es necesario, esto facilita la reutilización y mantenimiento de la configuración.

Referencias



Espero que esta documentación detallada sea de gran utilidad. Si tienes alguna otra pregunta o necesitas algo más, no dudes en preguntar.