C# 具有强类型配置的ConfigurationBuilder
如何创建一个C# 具有强类型配置的ConfigurationBuilder,c#,asp.net-core,configuration,C#,Asp.net Core,Configuration,如何创建一个ConfigurationBuilder,搜索环境变量,如果没有找到,则使用appSetting参数 我的代码当前为: public void ConfigureServices(IServiceCollection services) { // Get configuration var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var co
ConfigurationBuilder
,搜索环境变量,如果没有找到,则使用appSetting
参数
我的代码当前为:
public void ConfigureServices(IServiceCollection services)
{
// Get configuration
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: false)
.Build();
var settings = new AppSettings();
configuration.GetSection("App").Bind(settings);
// ...
services.AddSingleton<ILogger, LogConsole>()
.AddSingleton<IDatabaseManager, PostgresDatabaseManager>()
.AddSingleton<IDbConnectionFactory, PostgreDbConnectionFactory>()
.Configure<AppSettings>(configuration.GetSection("App"))
.AddOptions()
.BuildServiceProvider();
}
public void配置服务(IServiceCollection服务)
{
//获取配置
var environmentName=Environment.GetEnvironmentVariable(“ASPNETCORE_环境”);
var configuration=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddenEnvironmentVariables()
.AddJsonFile(“appsettings.json”,可选:false,重载更改:false)
.AddJsonFile($“appsettings.{environmentName}.json”,可选:true,重载更改:false)
.Build();
var settings=新的AppSettings();
配置.GetSection(“App”).Bind(设置);
// ...
services.AddSingleton()
.AddSingleton()
.AddSingleton()
.配置
configuration
包含所有我的环境变量(Count=89
)和AppSettings
变量
我尝试了以下在这里找到的东西:
但我的印象是,这种类型的配置与强类型配置不匹配。这是默认情况下的工作方式。定义配置提供程序的顺序很重要。ASP.NET Core将以相同的顺序使用它们。基本上,它所做的只是从每个源收集值并将它们放入字典中。随着每一个进一步的源的使用,它要么向字典中添加额外的键值对,要么覆盖现有的键值对,就像字典通常所做的那样。这创建了一种简单但有效的覆盖能力,因为您添加的最后一个配置源始终对特定键值拥有最后发言权
例如,在您的情况下,首先加载环境变量。然后,将解析JSON文件并添加其中的任何值。因此,如果您没有定义特定的环境变量,默认情况下,它的值将来自JSON文件
如果您想要相反的方式,如果设置了环境变量,那么应该使用该值而不是JSON文件中定义的值,只需更改提供程序的顺序:
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: false)
.AddEnvironmentVariables()