using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using StellaOps.Telemetry.Federation.Aggregation; using StellaOps.Telemetry.Federation.Bundles; using StellaOps.Telemetry.Federation.Consent; using StellaOps.Telemetry.Federation.Intelligence; using StellaOps.Telemetry.Federation.Privacy; using StellaOps.Telemetry.Federation.Security; using StellaOps.Telemetry.Federation.Sync; namespace StellaOps.Telemetry.Federation; public static class FederationServiceCollectionExtensions { public static IServiceCollection AddFederatedTelemetry( this IServiceCollection services, Action? configureOptions = null) { ArgumentNullException.ThrowIfNull(services); services.AddOptions() .Configure(options => configureOptions?.Invoke(options)); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(sp => sp.GetRequiredService()); services.TryAddSingleton(sp => sp.GetRequiredService()); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); return services; } public static IServiceCollection AddFederatedTelemetrySync( this IServiceCollection services) { ArgumentNullException.ThrowIfNull(services); services.AddHostedService(); return services; } }