using ComplianceNFs.Service; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using ComplianceNFs.Core.Ports; using ComplianceNFs.Infrastructure.Repositories; using ComplianceNFs.Infrastructure.Mail; using ComplianceNFs.Infrastructure.Parsers; using ComplianceNFs.Infrastructure.Archiving; using ComplianceNFs.Core.Application.Services; using ComplianceNFs.Core.Application; using Microsoft.EntityFrameworkCore; using ComplianceNFs.Infrastructure; IHost host = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); }) .ConfigureServices((context, services) => { var config = context.Configuration; // Register EF Core DbContext for PostgreSQL services.AddDbContext(options => options.UseNpgsql(config["PostgresConnectionString"])); // Register infrastructure services.AddSingleton(sp => { var connectionString = config["AccessConnectionString"]; if (string.IsNullOrWhiteSpace(connectionString)) throw new InvalidOperationException("AccessConnectionString is missing in configuration."); return new AccessDbRepository(connectionString); }); // Register AttachmentRepository as scoped, using EF Core DbContext services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(sp => { var archiveBasePath = config["ArchiveBasePath"]; if (string.IsNullOrWhiteSpace(archiveBasePath)) throw new InvalidOperationException("ArchiveBasePath is missing in configuration."); return new FileArchiver(archiveBasePath); }); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddHostedService(); }) .Build(); host.Run();