Giuliano Paschoalino e6b2180c94 feat(logging): Implement robust logging across infrastructure, application, and UI layers
- Added Microsoft.Extensions.Logging to various projects for enhanced logging capabilities.
- Updated AccessDbRepository and AttachmentRepository to include logging for database operations.
- Integrated logging into MailListener for better error handling and operational insights.
- Modified tests to utilize mocks for ILogger to ensure logging behavior is tested.
- Enhanced App.xaml.cs and MainWindow.xaml.cs to log application startup and initialization events.
- Created LoggingBootstrapper to configure logging services in the WPF application.
- Updated TODOs-and-Roadmap.md to reflect the addition of logging features.
2025-06-18 17:38:52 -03:00

57 lines
2.6 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;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureServices((context, services) =>
{
var config = context.Configuration;
// 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);
});
services.AddSingleton<IAttachmentRepository>(sp =>
{
var pgConnectionString = config["PostgresConnectionString"];
if (string.IsNullOrWhiteSpace(pgConnectionString))
throw new InvalidOperationException("PostgresConnectionString is missing in configuration.");
var logger = sp.GetRequiredService<Microsoft.Extensions.Logging.ILogger<AttachmentRepository>>();
return new AttachmentRepository(pgConnectionString, logger);
});
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();