using DigitalData.EmailProfiler.Application.Common.Interfaces; using DigitalData.EmailProfiler.Infrastructure.Messaging; using DigitalData.EmailProfiler.Infrastructure.Queue; using DigitalData.EmailProfiler.Infrastructure.Services; using DigitalData.EmailProfiler.Infrastructure.Services.Background; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace DigitalData.EmailProfiler.Infrastructure; /// /// Dependency injection configuration for Infrastructure layer /// public static class DependencyInjection { /// /// Adds Infrastructure layer services to the DI container /// public static IServiceCollection AddInfrastructure( this IServiceCollection services, IConfiguration configuration) { // --- External Services --- // Email Service (using Limilabs Mail.dll - Singleton for use in EmailSenderWorker) services.AddSingleton(); // PDF Processing Service (using DevExpress.Pdf) services.AddScoped(); // Encryption Service (using Data Protection API - Singleton, thread-safe) services.AddSingleton(); // --- Email Queue (RabbitMQ) --- services.AddSingleton(); // --- RabbitMQ Configuration --- services.Configure( configuration.GetSection(RabbitMqConfiguration.SectionName)); // --- Data Protection (for encryption) --- services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"C:\ProgramData\EmailService\Keys")) .SetApplicationName("EmailProfiler"); // Register Background Workers services.AddHostedService(); return services; } }