using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using StellaOps.Aoc; namespace StellaOps.Concelier.Core.Aoc; public static class AocServiceCollectionExtensions { /// /// Registers Aggregation-Only Contract guard services for raw advisory ingestion. /// /// Service collection to configure. /// Optional guard configuration. public static IServiceCollection AddConcelierAocGuards( this IServiceCollection services, Action? configure = null) { if (services is null) { throw new ArgumentNullException(nameof(services)); } services.AddAocGuard(); if (configure is not null) { services.Configure(configure); } services.TryAddSingleton(sp => { var guard = sp.GetRequiredService(); var options = sp.GetService>(); return new AdvisoryRawWriteGuard(guard, options); }); return services; } }