44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
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<DataContext>())
|
||
{
|
||
//если миграциями БД еще не создана, то 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
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|