From b6470fce5a199d6099b259423d9ffa2baf15b241 Mon Sep 17 00:00:00 2001 From: TekH Date: Mon, 27 Jul 2026 10:04:05 +0200 Subject: [PATCH] Refactor: Remove IOutgoingEmailConsumer interface Simplified the codebase by removing the `IOutgoingEmailConsumer` interface and directly using the `OutgoingEmailConsumer` class. - Removed `IOutgoingEmailConsumer` from the application. - Updated `DependencyInjection` to register `OutgoingEmailConsumer` directly. - Modified `OutgoingEmailConsumer` to no longer implement the removed interface. - Updated `AsyncInitWorker` to depend directly on `OutgoingEmailConsumer`. - Simplified initialization logic for email consumer and publisher. These changes eliminate an unnecessary abstraction layer, making the code easier to maintain while preserving functionality. --- .../Common/Interfaces/IOutgoingEmailConsumer.cs | 8 -------- .../DependencyInjection.cs | 2 +- .../Queue/OutgoingEmailConsumer.cs | 2 +- .../Services/Background/AsyncInitWorker.cs | 9 ++++----- 4 files changed, 6 insertions(+), 15 deletions(-) delete mode 100644 src/DigitalData.MessagingService.Application/Common/Interfaces/IOutgoingEmailConsumer.cs diff --git a/src/DigitalData.MessagingService.Application/Common/Interfaces/IOutgoingEmailConsumer.cs b/src/DigitalData.MessagingService.Application/Common/Interfaces/IOutgoingEmailConsumer.cs deleted file mode 100644 index 227df77..0000000 --- a/src/DigitalData.MessagingService.Application/Common/Interfaces/IOutgoingEmailConsumer.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace DigitalData.MessagingService.Application.Common.Interfaces; - -/// -/// Email queue interface for outgoing emails. -/// -public interface IOutgoingEmailConsumer -{ -} diff --git a/src/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs b/src/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs index e421110..374f69c 100644 --- a/src/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs +++ b/src/DigitalData.MessagingService.Infrastructure/DependencyInjection.cs @@ -32,7 +32,7 @@ public static class DependencyInjection services.AddSingleton(); // --- Email Queue (RabbitMQ) --- - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/src/DigitalData.MessagingService.Infrastructure/Queue/OutgoingEmailConsumer.cs b/src/DigitalData.MessagingService.Infrastructure/Queue/OutgoingEmailConsumer.cs index 918f74e..7258f63 100644 --- a/src/DigitalData.MessagingService.Infrastructure/Queue/OutgoingEmailConsumer.cs +++ b/src/DigitalData.MessagingService.Infrastructure/Queue/OutgoingEmailConsumer.cs @@ -15,7 +15,7 @@ namespace DigitalData.MessagingService.Infrastructure.Queue; /// Provides message persistence, scalability, and reliability. /// Uses Lazy initialization pattern to avoid blocking constructor. /// -public sealed class OutgoingEmailConsumer(IOptions config, ILogger Logger, IEmailService EmailService, RabbitMqConnectionFactory CnnFactory) : IOutgoingEmailConsumer, IAsyncDisposable +public sealed class OutgoingEmailConsumer(IOptions config, ILogger Logger, IEmailService EmailService, RabbitMqConnectionFactory CnnFactory) : IAsyncDisposable { private readonly RabbitMqConfiguration _config = config.Value; private IChannel? _consumeChannel = null; // Dedicated channel for consuming diff --git a/src/DigitalData.MessagingService.Infrastructure/Services/Background/AsyncInitWorker.cs b/src/DigitalData.MessagingService.Infrastructure/Services/Background/AsyncInitWorker.cs index 276e7fd..5be68d5 100644 --- a/src/DigitalData.MessagingService.Infrastructure/Services/Background/AsyncInitWorker.cs +++ b/src/DigitalData.MessagingService.Infrastructure/Services/Background/AsyncInitWorker.cs @@ -10,7 +10,7 @@ namespace DigitalData.MessagingService.Infrastructure.Services.Background; /// Leverages a push-based, event-driven RabbitMQ consumer to eliminate polling overhead. /// Email account configuration is resolved exclusively from application settings; no database access is performed. /// -public class AsyncInitWorker(IOutgoingEmailConsumer EmailConsumer, IOutgoingEmailPublisher EmailPublisher, RabbitMqConnectionFactory CnnFactory) : BackgroundService +public class AsyncInitWorker(OutgoingEmailConsumer EmailConsumer, IOutgoingEmailPublisher EmailPublisher, RabbitMqConnectionFactory CnnFactory) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { @@ -18,10 +18,9 @@ public class AsyncInitWorker(IOutgoingEmailConsumer EmailConsumer, IOutgoingEmai // message processing is handled asynchronously via registered event callbacks. await CnnFactory.InitAsync(stoppingToken); - if (EmailConsumer is OutgoingEmailConsumer outgoingEmailConsumer) - await outgoingEmailConsumer.InitAsync(); + await EmailConsumer.InitAsync(); - if (EmailPublisher is OutgoingEmailPublisher outgoingEmailPublisher) - await outgoingEmailPublisher.InitAsync(); + if (EmailPublisher is OutgoingEmailPublisher emailPublisher) + await emailPublisher.InitAsync(); } } \ No newline at end of file