Выберите поставщика конфигурации

Я пытаюсь получить настройки с моего сервера конфигурации и сопоставить их с моим объектом. тем не мение IConfiguration возвращает мне коллекцию Providers и тогда я должен использовать GetSection или же GetChildern способ получить настройки конфигурации.

например

Startup.cs

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

Вышеуказанный раздел дает мне определенный раздел и позволяет сопоставить его с моим MyConfiguration свойства класса.

Однако есть и другие разделы, на которые мне нужно ориентироваться. Я не хочу делать .GetSection чтобы получить их один за другим.

Есть ли что-нибудь, что я могу использовать, чтобы получить коллекцию от необходимого поставщика, т.е. SteelToe чтобы я мог сопоставить его со свойствами, определенными в моем классе конфигурации?

1 ответ

Решение

Вы можете создать класс сопоставления для вашей конфигурации, например так:

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

РЕДАКТИРОВАТЬ:

если у вас есть этот конфиг Steeltoe

{
  "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 следующим образом.

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;

здесь конфигурация является IConfiguration

Другие вопросы по тегам