using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Repositories; using BMA.EHR.Infrastructure.MessageQueue; using BMA.EHR.Infrastructure.Persistence; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace BMA.EHR.Infrastructure { public static class InfrastructureServiceRegistration { public static IServiceCollection AddMessageQueue(this IServiceCollection services) { services.AddHostedService(); return services; } public static IServiceCollection AddLeavePersistence(this IServiceCollection services, IConfiguration configuration) { // leave db context var connectionStringLeave = configuration.GetConnectionString("LeaveConnection"); services.AddDbContext(options => options.UseMySql(connectionStringLeave, ServerVersion.AutoDetect(connectionStringLeave), b => { b.MigrationsAssembly(typeof(LeaveDbContext).Assembly.FullName); b.MigrationsHistoryTable("__LeaveMigrationsHistory"); }), ServiceLifetime.Transient); services.AddTransient(provider => provider.GetService()); return services; } public static IServiceCollection AddDisciplinePersistence(this IServiceCollection services, IConfiguration configuration) { // discipline db context var connectionStringDiscipline = configuration.GetConnectionString("DisciplineConnection"); services.AddDbContext(options => options.UseMySql(connectionStringDiscipline, ServerVersion.AutoDetect(connectionStringDiscipline), b => { b.MigrationsAssembly(typeof(DisciplineDbContext).Assembly.FullName); b.MigrationsHistoryTable("__DisciplineMigrationsHistory"); }), ServiceLifetime.Transient); services.AddTransient(provider => provider.GetService()); return services; } public static IServiceCollection AddPersistence(this IServiceCollection services, IConfiguration configuration) { services.AddTransient(); var connectionString = configuration.GetConnectionString("DefaultConnection"); services.AddDbContext(options => options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), b => { b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName); b.MigrationsHistoryTable("__EHRMigrationsHistory"); }), ServiceLifetime.Transient); services.AddTransient(provider => provider.GetService()); var connectionStringExam = configuration.GetConnectionString("ExamConnection"); services.AddDbContext(options => options.UseMySql(connectionStringExam, ServerVersion.AutoDetect(connectionStringExam), b => { b.MigrationsAssembly(typeof(ApplicationDBExamContext).Assembly.FullName); b.MigrationsHistoryTable("__EHRMigrationsHistory"); }), ServiceLifetime.Transient); services.AddTransient(provider => provider.GetService()); return services; } } }