feat(audit): AddZbAudit DI extension with safe defaults
TryAdd registers NullAuditRedactor + NoOpAuditWriter so consumer registrations win; symmetric override tests for both writer and redactor.
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
|
||||||
|
namespace ZB.MOM.WW.Audit;
|
||||||
|
|
||||||
|
/// <summary>DI helpers for ZB.MOM.WW.Audit.</summary>
|
||||||
|
public static class AuditServiceCollectionExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Registers safe defaults — <see cref="NullAuditRedactor"/> and <see cref="NoOpAuditWriter"/> —
|
||||||
|
/// using TryAdd so a consumer that has already registered a real writer/redactor wins. Consumers
|
||||||
|
/// compose <see cref="RedactingAuditWriter"/>/<see cref="CompositeAuditWriter"/> around their own sink.
|
||||||
|
/// </summary>
|
||||||
|
public static IServiceCollection AddZbAudit(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(services);
|
||||||
|
services.TryAddSingleton<IAuditRedactor>(NullAuditRedactor.Instance);
|
||||||
|
services.TryAddSingleton<IAuditWriter>(NoOpAuditWriter.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace ZB.MOM.WW.Audit.Tests;
|
||||||
|
|
||||||
|
public class AuditServiceCollectionExtensionsTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Registers_null_redactor_and_noop_writer_by_default()
|
||||||
|
{
|
||||||
|
var sp = new ServiceCollection().AddZbAudit().BuildServiceProvider();
|
||||||
|
Assert.IsType<NullAuditRedactor>(sp.GetRequiredService<IAuditRedactor>());
|
||||||
|
Assert.IsType<NoOpAuditWriter>(sp.GetRequiredService<IAuditWriter>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Does_not_override_a_preregistered_writer()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddSingleton<IAuditWriter>(new CompositeAuditWriter(System.Array.Empty<IAuditWriter>()));
|
||||||
|
var sp = services.AddZbAudit().BuildServiceProvider();
|
||||||
|
Assert.IsType<CompositeAuditWriter>(sp.GetRequiredService<IAuditWriter>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Does_not_override_a_preregistered_redactor()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddSingleton<IAuditRedactor>(new TruncatingAuditRedactor());
|
||||||
|
var sp = services.AddZbAudit().BuildServiceProvider();
|
||||||
|
Assert.IsType<TruncatingAuditRedactor>(sp.GetRequiredService<IAuditRedactor>());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user