gpt4 book ai didi

asp.net-mvc - 我可以将配置从 appsettings.json 移动到 ASP.NET Core MVC 应用程序中的数据库吗?

转载 作者:行者123 更新时间:2023-12-04 04:17:31 25 4
gpt4 key购买 nike

我有一个使用 appsettings.json 的应用程序存储一些配置,如 API 地址、 token 、保存文件的路径等。

我们没有 DevOps,因此对于我们在 appsettings 中所做的每项更改,我们都需要要求基础架构团队将更改部署到生产中。

也就是说,我在想是否有可能将这些配置中的一些放在数据库和 Startup 中。构造函数或在 ConfigureServices从数据库中获取此信息并在应用程序中使用它。

例如,这只是为了不需要每次向 appsettings 添加新 key 时都进行新部署。我会简单地在数据库中创建一个新记录,应用程序将使用此配置,就像它在 appsettings 中一样。

今天我们有这个:

public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();

Configuration = builder.Build();
}

我想知道是否有可行的或可能的类似的东西:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.GetConfigFromDataBase() /// And this will be the method to get from DB the dynamic configuration
.AddEnvironmentVariables();

Configuration = builder.Build();
}

是否可以?或者我试图重新发明轮子?

提前感谢您的时间!

最佳答案

首先为数据库创建一个实体。

public class SettingsEntity
{
public Guid Id { get; set; }
public string Key { get; set; }
public string Value { get; set; }
}
其次是配置源。
public class DatabaseConfigurationSource : IConfigurationSource
{
public DatabaseConfigurationSource(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new DatabaseConfigurationProvider(Configuration);
}
}
第三个配置提供程序。
public class DatabaseConfigurationProvider : ConfigurationProvider
{
public DatabaseConfigurationProvider(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

public override void Load()
{
using var context = new DbContext(CreateContextOptions());

Data = context.Settings
.ToDictionary(x => x.Key, x => x.Value);
}

private DbContextOptions<DbContext> CreateContextOptions()
{
var connectionString = Configuration.GetConnectionString("Database");

return new DbContextOptionsBuilder<DbContext>()
.UseSqlServer(connectionString)
.Options;
}
四是注册延期。
public static class DatabaseConfigurationBuilderExtensions
{
public static IConfigurationBuilder AddDatabaseConfiguration(
this IConfigurationBuilder builder)
{
var tempConfig = builder.Build();
return builder.Add(new DatabaseConfigurationSource(tempConfig));
}
}
最后你在你的 Program.cs 中注册它
 public static IWebHostBuilder CreateHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddDatabaseConfiguration();
})
.UseNLog();

关于asp.net-mvc - 我可以将配置从 appsettings.json 移动到 ASP.NET Core MVC 应用程序中的数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60330342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com