56 lines
2.5 KiB
C#

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<ComplianceNFsDbContext>(options =>
options.UseNpgsql(config["PostgresConnectionString"]));
// Register infrastructure
services.AddSingleton<IAccessDbRepository>(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<IAttachmentRepository, AttachmentRepository>();
services.AddSingleton<IMailListener, MailListener>();
services.AddSingleton<IXmlParser, XmlParser>();
services.AddSingleton<IPdfParser, PdfParser>();
services.AddSingleton<IFileArchiver>(sp =>
{
var archiveBasePath = config["ArchiveBasePath"];
if (string.IsNullOrWhiteSpace(archiveBasePath))
throw new InvalidOperationException("ArchiveBasePath is missing in configuration.");
return new FileArchiver(archiveBasePath);
});
services.AddSingleton<IInvoiceIngestionService, InvoiceIngestionService>();
services.AddSingleton<IMatchingService, MatchingService>();
services.AddSingleton<IComplianceService, ComplianceService>();
services.AddSingleton<INotificationService, NotificationService>();
services.AddSingleton<IArchivingService, ArchivingService>();
services.AddHostedService<Worker>();
})
.Build();
host.Run();