C# 以配置提供程序为目标

C# 以配置提供程序为目标,c#,configuration,configserver,steeltoe,C#,Configuration,Configserver,Steeltoe,我正在尝试从配置服务器获取设置并将其映射到我的对象。 但是,IConfiguration正在返回一组提供程序,然后我必须使用GetSection或GetChildern方法来获取配置设置 e、 g Startup.cs public void ConfigureServices(IServiceCollection services) { services.Configure<MyConfigurations>(Configuration.GetSection("spring

我正在尝试从配置服务器获取设置并将其映射到我的对象。 但是,
IConfiguration
正在返回一组
提供程序
,然后我必须使用
GetSection
GetChildern
方法来获取配置设置

e、 g

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfigurations>(Configuration.GetSection("spring:cloud:config"));
}
public void配置服务(IServiceCollection服务)
{
Configure(Configuration.GetSection(“spring:cloud:config”);
}
以上内容为我提供了一个特定的部分,我可以将其映射到我的
MyConfiguration
类属性

但是,我需要针对更多的部分。我不想通过
.GetSection
一个接一个地获取它们


是否可以使用任何东西从所需的提供程序(即
SteelToe
)获取集合,以便将其映射到配置类中定义的属性?

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

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>();
您可以这样定义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);
像这样使用

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);
services.Configure(配置);
并使用以下命令访问uri部分,例如

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

这里的配置是IConfiguration

感谢努曼的回答。因此,如果我的提供者是
Steeltoe.Extensions.Configuration.ConfigServer.ConfigServerConfigurationProvider
,那么我会将
ConfigSettings
中的属性命名为
公共字符串ConfigServerConfigurationProvider
?是的,这些名称应该匹配以绑定工作。嗨,如果我弄错了,诺曼会道歉吗?因此,在我的startup.cs中,我有一个
services.Configure(配置)
然后在
MyConfigurations
class I中有一个名为
public string ConfigServerConfigurationProvider
的属性,这不应该自动映射它吗?属性为空请查看编辑,它是否回答了您的问题?再次感谢Nouman。现在更有意义了:)我将把这个标记为答案。再问一件事,要映射像
ff-test-data
这样的设置,我需要使用像
[DataMember(Name=“ff-test-data”)]public-string-testData{get;set;}