using Femto.Common.Infrastructure; using Femto.Modules.Auth.Data; using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Femto.Modules.Auth.Application; public static class AuthenticationStartup { public static void InitializeAuthenticationModule(this IServiceCollection rootContainer, string connectionString) { var hostBuilder = Host.CreateDefaultBuilder(); hostBuilder.ConfigureServices(services => ConfigureServices(services, connectionString)); var host = hostBuilder.Build(); rootContainer.AddScoped(_ => new AuthenticationModule(host)); } private static void ConfigureServices(IServiceCollection services, string connectionString) { services.AddDbContext( builder => { builder.UseNpgsql(connectionString); builder.UseSnakeCaseNamingConvention(); }); services.AddMediatR(c => c.RegisterServicesFromAssembly(typeof(AuthenticationStartup).Assembly)); services.AddDbContext(builder => { builder.UseNpgsql(); builder.UseSnakeCaseNamingConvention(); builder.EnableSensitiveDataLogging(); }); services.AddScoped(s => s.GetRequiredService()); services.AddMediatR(c => { c.RegisterServicesFromAssembly(typeof(AuthenticationStartup).Assembly); }); services.AddTransient( typeof(IPipelineBehavior<,>), typeof(SaveChangesPipelineBehaviour<,>) ); } }