using JdeScoping.DataSync; using JdeScoping.DataSync.Options; using JdeScoping.DataSync.Contracts; using JdeScoping.DataSync.HealthChecks; using JdeScoping.DataSync.Services; using JdeScoping.DataSync.Telemetry; using Microsoft.Extensions.Configuration; namespace Microsoft.Extensions.DependencyInjection; /// /// Extension methods for registering data sync services. /// public static class DataSyncDependencyInjection { /// /// Adds data synchronization services to the service collection. /// /// The service collection. /// The configuration. /// The service collection for chaining. public static IServiceCollection AddDataSyncServices( this IServiceCollection services, IConfiguration configuration) { // Bind configuration with validation services.AddOptions() .Bind(configuration.GetSection(DataSyncOptions.SectionName)) .ValidateDataAnnotations() .ValidateOnStart(); // Pipeline configuration (new ETL infrastructure) services.AddOptions() .Bind(configuration.GetSection(PipelineOptions.SectionName)); // Pipeline factory (new ETL infrastructure) services.AddSingleton(); // Register hosted service services.AddHostedService(); // Register core services as scoped (for parallel isolation) services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); // Register health check services.AddHealthChecks() .AddCheck("data-sync", tags: ["datasync", "background"]); // Register metrics as singleton services.AddSingleton(); return services; } }