using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using PARR.Core.Repositories.Interfaces; using PARR.Core.Repositories.Interfaces.Job; using PARR.Core.Repositories.Interfaces.JobGroupRepositories; using PARR.Core.Repositories.Interfaces.RobotRepositories; using PARR.Core.Repositories.Interfaces.Schedule; using PARR.Core.Repositories.Interfaces.TaskRepositories; using PARR.Core.Repositories.Interfaces.Unit; using PARR.DAL.Configurations.DbSettings; using PARR.DAL.Context; using PARR.DAL.Repositories; using PARR.DAL.Repositories.Job; using PARR.DAL.Repositories.JobGroupRepositories; using PARR.DAL.Repositories.RobotRepositories; using PARR.DAL.Repositories.Schedule; using PARR.DAL.Repositories.TaskRepositories; using PARR.DAL.Repositories.Unit; using PARR.Domain.Settings; namespace PARR.DAL { public static class DependencyInjection { // TODO: Избавиться от лишнего /// /// Устанавливает Dal сервисы (1) /// /// /// public static void AddDalServices(this IServiceCollection services, IConfiguration configuration) { //.EnableSensitiveDataLogging() - вкл подробное логирование при применении миграций, на проде выключить services.AddDbContext(opt => opt .EnableSensitiveDataLogging() .UseNpgsql(configuration.GetConnectionString("DefaultConnection")) ); // ----------------- // TODO: Переделать все репозитории, которые работаютс с PG с AddTransient на AddScoped // ----------------- // Entity services //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); //services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddScoped(); #region Schedule services.AddTransient(); services.AddTransient(); #endregion #region Unit services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); #endregion #region Job services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); #endregion #region JobGroup services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); #endregion #region Task services.AddScoped(); services.AddScoped(); services.AddScoped(); #endregion //services.AddTransient(); #region NextRun Services //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); #endregion #region DomainServces //services.AddTransient(); //services.AddTransient(); //services.AddTransient(); //services.Configure(options => //{ // options.LoadBatchSize = 50; //}); #endregion } /// /// Добавляет конфигурацию Dal (2) /// /// /// /// public static IConfigurationBuilder AddDalConfigurations(this IConfigurationBuilder builder, IServiceCollection services) { builder.Add(new DBConfigurationSource(services)); return builder; } /// /// Добавляет конфигурацию в сервисы (3) /// /// /// public static void AddDallSettings(this IServiceCollection services, IConfiguration configuration) { //SettingsFromDb configuration var settingsFromDb = new SettingsFromDb(); configuration.GetSection(nameof(SettingsFromDb)).Bind(settingsFromDb); services.AddSingleton(settingsFromDb); PrefixSettings.PrefixWithoutVariable = settingsFromDb.TemplatePrefixWithoutVariable; // Сервис - Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы services.AddSingleton(provider => { using var scope = provider.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); var settingsFromDb = scope.ServiceProvider.GetRequiredService(); var logger = scope.ServiceProvider.GetRequiredService>(); return new ScheduleResponseAreaTimeOffsetRepository(dbContext, settingsFromDb, logger); }); } } }