From 431b56a0728992bfb9bf138e4426032bcd70351d Mon Sep 17 00:00:00 2001 From: XShine555 Date: Sun, 5 Jul 2026 15:14:03 +0200 Subject: [PATCH] refactor(infra): register auditable interceptor via DI Register AuditableEntityInterceptor as a singleton and attach it through the AddDbContext options callback instead of newing it up inside Database.OnConfiguring. The interceptor is stateless, so a single shared instance is reused across contexts and its wiring lives in the DI layer. The design-time factory keeps working (interceptor is runtime-only, irrelevant for migrations). Verified: build + ef migrations list (design-time context) OK; the Worker host builds and validates the full DI graph (reaches endpoint configuration) with no captive-dependency or interceptor error. Build: 0 warnings, 0 errors. Co-Authored-By: Claude Opus 4.8 --- backend/Musify.Infrastructure/Persistence/Database.cs | 1 - .../Persistence/DatabaseDependencyInjection.cs | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/Musify.Infrastructure/Persistence/Database.cs b/backend/Musify.Infrastructure/Persistence/Database.cs index 12947e0..e3dbc84 100644 --- a/backend/Musify.Infrastructure/Persistence/Database.cs +++ b/backend/Musify.Infrastructure/Persistence/Database.cs @@ -15,7 +15,6 @@ namespace Musify.Infrastructure.Persistence protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(configuration.ConnectionString); - optionsBuilder.AddInterceptors(new AuditableEntityInterceptor()); } protected override void OnModelCreating(ModelBuilder modelBuilder) diff --git a/backend/Musify.Infrastructure/Persistence/DatabaseDependencyInjection.cs b/backend/Musify.Infrastructure/Persistence/DatabaseDependencyInjection.cs index 6d3a9d9..a7fa1a8 100644 --- a/backend/Musify.Infrastructure/Persistence/DatabaseDependencyInjection.cs +++ b/backend/Musify.Infrastructure/Persistence/DatabaseDependencyInjection.cs @@ -1,3 +1,4 @@ +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -18,7 +19,11 @@ namespace Musify.Infrastructure.Persistence serviceDescriptors.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>().Value); - serviceDescriptors.AddDbContext(); + serviceDescriptors.AddSingleton(); + + serviceDescriptors.AddDbContext((serviceProvider, options) => + options.AddInterceptors(serviceProvider.GetRequiredService())); + serviceDescriptors.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); return serviceDescriptors;