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 <noreply@anthropic.com>
This commit is contained in:
@@ -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<IOptions<DatabaseConfiguration>>().Value);
|
||||
|
||||
serviceDescriptors.AddDbContext<Database>();
|
||||
serviceDescriptors.AddSingleton<AuditableEntityInterceptor>();
|
||||
|
||||
serviceDescriptors.AddDbContext<Database>((serviceProvider, options) =>
|
||||
options.AddInterceptors(serviceProvider.GetRequiredService<AuditableEntityInterceptor>()));
|
||||
|
||||
serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>());
|
||||
|
||||
return serviceDescriptors;
|
||||
|
||||
Reference in New Issue
Block a user