43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
|
|
using Microsoft.Extensions.Configuration;
|
|||
|
|
using Microsoft.Extensions.DependencyInjection;
|
|||
|
|
using PARR.DAL.Context;
|
|||
|
|
using PARR.DAL.Contracts;
|
|||
|
|
|
|||
|
|
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.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
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|