58 lines
2.2 KiB
C#
58 lines
2.2 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// Extension methods for registering data sync services.
|
|
/// </summary>
|
|
public static class DataSyncDependencyInjection
|
|
{
|
|
/// <summary>
|
|
/// Adds data synchronization services to the service collection.
|
|
/// </summary>
|
|
/// <param name="services">The service collection.</param>
|
|
/// <param name="configuration">The configuration.</param>
|
|
/// <returns>The service collection for chaining.</returns>
|
|
public static IServiceCollection AddDataSyncServices(
|
|
this IServiceCollection services,
|
|
IConfiguration configuration)
|
|
{
|
|
// Bind configuration with validation
|
|
services.AddOptions<DataSyncOptions>()
|
|
.Bind(configuration.GetSection(DataSyncOptions.SectionName))
|
|
.ValidateDataAnnotations()
|
|
.ValidateOnStart();
|
|
|
|
// Pipeline configuration (new ETL infrastructure)
|
|
services.AddOptions<PipelineOptions>()
|
|
.Bind(configuration.GetSection(PipelineOptions.SectionName));
|
|
|
|
// Pipeline factory (new ETL infrastructure)
|
|
services.AddSingleton<IEtlPipelineFactory, EtlPipelineFactory>();
|
|
|
|
// Register hosted service
|
|
services.AddHostedService<DataSyncService>();
|
|
|
|
// Register core services as scoped (for parallel isolation)
|
|
services.AddScoped<ISyncOrchestrator, SyncOrchestrator>();
|
|
services.AddScoped<IScheduleChecker, ScheduleChecker>();
|
|
services.AddScoped<ITableSyncOperation, TableSyncOperation>();
|
|
services.AddScoped<IDataUpdateRepository, DataUpdateRepository>();
|
|
|
|
// Register health check
|
|
services.AddHealthChecks()
|
|
.AddCheck<DataSyncHealthCheck>("data-sync", tags: ["datasync", "background"]);
|
|
|
|
// Register metrics as singleton
|
|
services.AddSingleton<DataSyncMetrics>();
|
|
|
|
return services;
|
|
}
|
|
}
|