Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有强类型配置的ConfigurationBuilder_C#_Asp.net Core_Configuration - Fatal编程技术网

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()