Выберите поставщика конфигурации
Я пытаюсь получить настройки с моего сервера конфигурации и сопоставить их с моим объектом. тем не мение 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