C# 将整个 appSettings 文件绑定到类

问题描述 投票:0回答:3

在 C# 中,我们可以将 appSettings 中的一些设置绑定到类,例如:

var connectionStrings = new ConnectionStrings();
var sectionConnectionString = Configuration.GetSection("ConnectionStrings");

在应用程序设置中,如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {

当我想绑定 Logging 时,我需要调用另一个绑定:

Configuration.GetSection("Logging");

如何绑定整个appsettings文件?

GetSection
带有空字符串不起作用:

Configuration.GetSection("");
c# configuration binding appsettings
3个回答
6
投票

您的配置需要一个类,然后您可以使用它(您不需要映射每个设置,只需映射您需要的设置):

var configObject = Configuration.Get<ConfigObject>();

配置对象示例:

public class ConfigObject {
    public Logging Logging { get; set; } 
    public string AllowedHosts { get; set; } 
    public ConnectionStrings ConnectionStrings { get; set; } 
}

public class Logging {
    public LogLevel LogLevel { get; set; } 
}

public class LogLevel {
    public string Default { get; set; } 
}

public class ConnectionStrings {
    public string ConnString1 { get; set; } 
}

提示: 如果您不使用 aspnetcore,您可能还需要包含此 NuGet 包:

Microsoft.Extensions.Configuration.Binder


3
投票

您可以按原样使用配置实例。

您可以将设置绑定到一个类:

var appSettings = Configuration.Get<AppSettings>();

或者您可以使用选项模式注入设置

services.Configure<AppSettings>(Configuration);

0
投票

另一种方法:

var settings = new Settings();
new ConfigurationBuilder().AddJsonFile("appsettings.json").Build().Bind(settings);
if (settings.KeyOne is null)
    throw new Exception("Required application settings are unavailable.");

注意,描述设置的结构应该使用

public
访问修饰符定义并开放设置,因为
Bind
方法必须被授予权限。所以它不应该是
record
(设计上是不可变的),并且不能用
internal
属性来定义。它应该看起来像这样:

public class Settings
{
    public string KeyOne { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.