diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs
index f6b5789..f6b1f86 100644
--- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs
+++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs
@@ -7,9 +7,7 @@ using DigitalData.MessagingService.Infrastructure.Repositories;
using DigitalData.MessagingService.Infrastructure.Services;
using DigitalData.MessagingService.Infrastructure.Services.Background;
using DigitalData.MessagingService.Publisher;
-using DigitalData.MessagingService.RabbitMQ;
using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@@ -23,10 +21,12 @@ public static class DependencyInjection
///
/// Adds Infrastructure layer services to the DI container
///
- public static IServiceCollection AddInfrastructure(
- this IServiceCollection services,
- IConfiguration configuration)
+ public static IServiceCollection AddInfrastructure(this IServiceCollection services, Action configure)
{
+ var configuration = new MessagingServiceInfrastructureConfiguration(services);
+ configure.Invoke(configuration);
+ configuration.EnsureRabbitMqConnectionFactoryAdded();
+
// --- External Services ---
// OAuth2 token services — provider-specific implementations registered separately,
// dispatcher is the single IOAuth2TokenService consumed by all other services.
@@ -55,9 +55,6 @@ public static class DependencyInjection
services.AddSingleton();
services.AddMessagingServicePublisher();
- // --- RabbitMQ Configuration ---
- services.AddRabbitMqConnectionFactory(configuration);
-
// ConsumerInitHealthCheck, RabbitMqConnectionHealthCheck and EmailSyncWorkerHealthCheck are
// registered as singletons here so background workers can inject and update them.
// Health check pipeline is wired up in the API layer via AddHealthChecks().
@@ -79,8 +76,7 @@ public static class DependencyInjection
services.AddMemoryCache();
// --- Database (InMemory) ---
- services.AddDbContext(options =>
- options.UseInMemoryDatabase("MessagingServiceDb"));
+ services.AddDbContext(options => options.UseInMemoryDatabase("MessagingServiceDb"));
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
@@ -91,5 +87,4 @@ public static class DependencyInjection
return services;
}
-}
-
+}
\ No newline at end of file
diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs
new file mode 100644
index 0000000..b085f5d
--- /dev/null
+++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/MessagingServiceInfrastructureConfiguration.cs
@@ -0,0 +1,40 @@
+using DigitalData.MessagingService.RabbitMQ;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace DigitalData.MessagingService.Infrastructure;
+
+public class MessagingServiceInfrastructureConfiguration
+{
+ internal IServiceCollection Services { get; }
+
+ private bool _rabbitMqConnectionFactoryAdded = false;
+
+ internal MessagingServiceInfrastructureConfiguration(IServiceCollection services)
+ {
+ Services = services;
+ }
+
+ public void EnsureRabbitMqConnectionFactoryAdded()
+ {
+ if (!_rabbitMqConnectionFactoryAdded)
+ {
+ throw new InvalidOperationException("RabbitMQ connection factory has not been added. Please call AddRabbitMqConnectionFactory() before using this configuration.");
+ }
+ }
+
+ public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(Action configure)
+ {
+ Services.AddRabbitMqConnectionFactory(configure);
+ _rabbitMqConnectionFactoryAdded = true;
+ return this;
+ }
+
+ public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(IConfiguration configuration, string sectionName = RabbitMqConfiguration.SectionName)
+ {
+ Services.AddRabbitMqConnectionFactory(configuration, sectionName);
+ _rabbitMqConnectionFactoryAdded = true;
+ return this;
+ }
+
+}