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 interfazIServiceCollection
.Microsoft.Extensions.Configuration
: Necesario para la interfazIConfiguration
.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 siservices
oconfiguration
son nulos.EventSourcingException
: Se lanza si la sección de configuraciónEventSourcing
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 siservices
,configuration
osetupOptions
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
- Repositorio de CodeDesignPlus.Net.Event.Sourcing: Para consultar el código fuente y ejemplos.
- Documentación de Microsoft.Extensions.DependencyInjection: Para entender el funcionamiento del IServiceCollection.
- Documentación de Microsoft.Extensions.Configuration: Para trabajar con la configuración en .NET.
- Documentación de Microsoft.Extensions.Options: Para entender como se gestionan las configuraciones fuertemente tipadas.
Espero que esta documentación detallada sea de gran utilidad. Si tienes alguna otra pregunta o necesitas algo más, no dudes en preguntar.