45 lines
1.9 KiB
C#
45 lines
1.9 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using ScadaLink.AuditLog.Configuration;
|
|
|
|
namespace ScadaLink.AuditLog;
|
|
|
|
/// <summary>
|
|
/// Composition root for the Audit Log (#23) component. M1 registers
|
|
/// <see cref="AuditLogOptions"/> and its validator; later milestones extend
|
|
/// this method to wire up writers, telemetry actors, and the central ingest
|
|
/// pipeline. Audit Log (#23) sits alongside Notification Outbox (#21) and
|
|
/// Site Call Audit (#22).
|
|
/// </summary>
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
/// <summary>Configuration section bound to <see cref="AuditLogOptions"/>.</summary>
|
|
public const string ConfigSectionName = "AuditLog";
|
|
|
|
/// <summary>
|
|
/// Binds <see cref="AuditLogOptions"/> from the
|
|
/// <see cref="ConfigSectionName"/> section of <paramref name="config"/>
|
|
/// and registers <see cref="AuditLogOptionsValidator"/> so a misconfigured
|
|
/// <c>AuditLog</c> section is rejected with a key-naming message when the
|
|
/// options are first resolved (or at startup when consumers wire in
|
|
/// <c>ValidateOnStart()</c>). M2+ will register writers, telemetry actors,
|
|
/// and the central ingest pipeline here. <c>IAuditLogRepository</c> is
|
|
/// registered by
|
|
/// <c>ScadaLink.ConfigurationDatabase.ServiceCollectionExtensions.AddConfigurationDatabase</c>,
|
|
/// so the caller (the Host on the central node) must also call that.
|
|
/// </summary>
|
|
public static IServiceCollection AddAuditLog(this IServiceCollection services, IConfiguration config)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
ArgumentNullException.ThrowIfNull(config);
|
|
|
|
services.AddOptions<AuditLogOptions>()
|
|
.Bind(config.GetSection(ConfigSectionName))
|
|
.ValidateOnStart();
|
|
services.AddSingleton<IValidateOptions<AuditLogOptions>, AuditLogOptionsValidator>();
|
|
|
|
return services;
|
|
}
|
|
}
|