db configuration provider
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace PARR.DAL.Configurations.DbSettings
|
||||
{
|
||||
internal static class DBConfigurationExtantions
|
||||
{
|
||||
public static IConfigurationBuilder AddDbSettings(this IConfigurationBuilder builder, IServiceCollection services)
|
||||
{
|
||||
return builder.Add(new DBConfigurationSource(services));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
20
PARR.DAL/Configurations/DbSettings/DBConfigurationSource.cs
Normal file
20
PARR.DAL/Configurations/DbSettings/DBConfigurationSource.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace PARR.DAL.Configurations.DbSettings
|
||||
{
|
||||
internal class DBConfigurationSource : IConfigurationSource
|
||||
{
|
||||
private readonly IServiceCollection services;
|
||||
|
||||
public DBConfigurationSource(IServiceCollection services)
|
||||
{
|
||||
this.services = services;
|
||||
}
|
||||
|
||||
public IConfigurationProvider Build(IConfigurationBuilder builder)
|
||||
{
|
||||
return new DBConfigurationProvider(services);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user