Skip to content

Instantly share code, notes, and snippets.

@Infarh
Forked from d2funlife/ConfigValue
Last active July 30, 2021 20:09
Show Gist options
  • Save Infarh/40b60b80c170b12ce9e2dcaf98854e10 to your computer and use it in GitHub Desktop.
Save Infarh/40b60b80c170b12ce9e2dcaf98854e10 to your computer and use it in GitHub Desktop.
Свой источник конфигурации Entity Framework
public class ConfigValue
{
public string Key { get; set; }
public string Value { get; set; }
}
public class EfConfigurationProvider : ConfigurationProvider
{
public Action<DbContextOptionsBuilder> Configurator { get; }
public EfConfigurationProvider(Action<DbContextOptionsBuilder> Configurator)
{
this.Configurator = Configurator;
}
public override void Load()
{
var builder = new DbContextOptionsBuilder<ExampleContext>();
Configurator(builder);
using var dbContext = new ExampleContext(builder.Options);
Data = dbContext.Configurations.ToDictionary(x => x.Key, v => v.Value);
}
}
public class EfConfigurationSource : IConfigurationSource
{
private readonly Action<DbContextOptionsBuilder> _Options;
public EfConfigurationSource(Action<DbContextOptionsBuilder> options)
{
_Options = options;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new EfConfigurationProvider(_Options);
}
}
public static class EfExtensions
{
public static IConfigurationBuilder AddEfConfiguration(this IConfigurationBuilder config, Action<DbContextOptionsBuilder> options)
{
return config.Add(new EfConfigurationSource(options));
}
}
public class ExampleContext : DbContext
{
public DbSet<ConfigValue> Configurations { get; set; }
public ExampleContext(DbContextOptions options) : base(options)
{
}
}
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
var config = builder.Build();
builder.AddEfConfiguration(optionsBuilder =>
{
optionsBuilder.UseNpgsql(config.GetConnectionString("DatabaseConnection"));
});
})
.UseStartup<Startup>();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment