以配置提供者为目标

Target a configuration provider

我正在尝试从我的配置服务器获取设置并将其映射到我的对象。 但是 IConfiguration 返回给我一个 Providers 的集合,然后我必须使用 GetSectionGetChildern 方法来获取配置设置。

例如

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfigurations>(Configuration.GetSection("spring:cloud:config"));
}

以上为我提供了一个特定的部分,并且能够将其映射到我的 MyConfiguration class 属性。

但是我需要定位更多部分。我不想做 .GetSection 来一一获取它们。

有什么我可以用来从所需提供程序获取集合的东西,即 SteelToe 以便我可以将其映射到我的配置 class 中定义的属性?

您可以为您的配置创建映射 class,如下所示:

public class ConfigSettings
{
    public string ConfigSetting1 { get; set; }
    public string ConfigSetting2 { get; set; }
    public string ConfigSetting3 { get; set; }
    public SubConfigSettings1 SubConfigSettings1 { get; set; }
}

public class SubConfigSettings1 
{
    public string SubConfigSetting1 { get; set; }
    public string SubConfigSetting2 { get; set; }
}

并使用

获取它们
var setting = Configuration.Get<ConfigSettings>();

编辑:

如果你有这个钢趾配置

{
  "spring": {
    "cloud": {
      "config": {
        "uri": "http://localhost:8888"
      }
    }
  },
  "Logging": {
    "IncludeScopes": true,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information"
      }
    }
  }
}

您可以像这样定义 ConfigSettings class。

public class ConfigSettings
{
    public Spring spring { get; set; }
    public Logging Logging { get; set; }
}

public class Spring
{
    public Cloud cloud { get; set; }
}

public class Cloud
{
    public Config config { get; set; }
}

public class Config
{
    public string uri { get; set; }
}

public class Logging
{
    public bool IncludeScopes { get; set; }
    public Loglevel LogLevel { get; set; }
    public Console Console { get; set; }
}

public class Console
{
    public Loglevel LogLevel { get; set; }
}

public class Loglevel
{
    public string Default { get; set; }
    public string System { get; set; }
    public string Microsoft { get; set; }
}

然后像这样使用。

services.Configure<ConfigSettings>(Configuration);

并使用以下访问 uri 部分,例如。

var settings = Configuration.Get<ConfigSettings>();
string springCloudConfigUri = settings.spring.cloud.config.uri;

这里的Configuration是IConfiguration