using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using PARR.DAL.Context; using PARR.Domain.Settings; namespace PARR.DAL.Configurations.DbSettings { internal class DBConfigurationProvider : ConfigurationProvider { private readonly IServiceCollection services; public DBConfigurationProvider(IServiceCollection services) { this.services = services; } public override void Load() { using (var dataContext = services.BuildServiceProvider().GetService()) { //если миграциями БД еще не создана, то SettingsInDbs будет недоступна try { var settings = dataContext?.Setting.AsNoTracking().ToList(); if (settings == null) return; if (settings != null) { //формируем список с корневым SettingsFromDb, и в него вложены дочерние настройки из БД, чтобы потом забиндить в класс Data = settings.ToDictionary(settings => $"{nameof(SettingsFromDb)}:{settings.Name}", settings => (string?)settings.Value); } } catch (Exception ex) { //TODO: логи, я не тестил, возможно надо через BuildServiceProvider прокинуть ILogger } } } } }