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