using System.Reflection; using ApplicationLayer.InfrastructureServicesInterfaces; using ApplicationLayer.Services.Applicants.NeededServices; using ApplicationLayer.Services.AuthServices.NeededServices; using ApplicationLayer.Services.VisaApplications.NeededServices; using Infrastructure.Common; using Infrastructure.Database.Applicants.Repositories; using Infrastructure.Database.Generic; using Infrastructure.Database.Users.Repositories; using Infrastructure.Database.VisaApplications.Repositories; using Infrastructure.EntityToExcelTemplateWriter; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using DbContext = Infrastructure.Database.DbContext; namespace Infrastructure; /// Provides methods to add services to DI-container public static class DependencyInjection { /// Add services needed for Infrastructure layer public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfigurationManager configurationManager, bool isDevelopment) { var databaseName = isDevelopment ? "developmentDB" : "normal'naya database"; services.AddDbContext(opts => opts.UseSqlServer(configurationManager.GetConnectionString(databaseName))); services.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); services.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); services.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddHttpContextAccessor(); services.AddScoped(); services.AddAutoMapper(Assembly.GetExecutingAssembly()); return services; } }