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.


  • 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.

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.

  • 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.

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 ...
}
}

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:

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);
    }

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;
    });
    }

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.



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