【问题标题】:ASP.NET IConfiguration, how to iterate or enumerate ProvidersASP.NET IConfiguration,如何迭代或枚举提供程序
【发布时间】:2021-10-21 08:05:03
【问题描述】:

我正在尝试编写一个测试来验证 X 提供程序是否已在特定场景中加载。

我可以解析IConfiguration 对象,我怎么知道其中有多少IConfigurationProviders

在我的启动中,我在我的程序中使用完全标准的配置

IConfiguration configuration = null;
var builder = Host.CreateDefaultBuilder()
    .ConfigureServices((hostContext, services) =>
    {
        configuration = hostContext.Configuration;
        var startup = new Startup(hostContext.Configuration, hostContext.HostingEnvironment);
        //startup.ConfigureServices(services);
    })

    .ConfigureAppConfiguration((hostContext, config) =>
    {
        config.AddAzureKeyVaultsFromConfig();
    });

builder.Build();
return configuration;

在调试时,当我将鼠标悬停在configuration 上时,我可以看到我的提供者列表。

我想做的是看到有 4 个提供者。我还想检查一下提供程序的类型。

如果我使用Enumerate(),它只会给我一个所有值的扁平列表,并丢弃它来自哪个提供者。

【问题讨论】:

    标签: c# asp.net-core configurationmanager


    【解决方案1】:

    您在此处拥有的对象实际上是一个IConfigurationRoot,并且恰好也实现了IConfiguration。因此,如果您这样对待它,您可以访问Providers 属性。例如:

    IConfigurationRoot configuration = null;
    
    // snip the rest of your code
    
    var providerCount = configuration.Providers.Count();
    

    【讨论】:

    • 这在我添加了对System.Linq 的引用并转换为IConfigurationRoot 类型((IConfigurationRoot)configNew).Providers.Count(); 后起作用了
    • 对不起,我的意思是创建IConfigurationRoot类型的配置对象。如果我是你,我宁愿这样做也不愿施放它。
    • 这看起来很简单,但我不明白我应该做的改变:)。你能详细说明什么比这样铸造更可取吗?
    • 使用 IConfigurationRoot 类型而不是 IConfigurationRoot。那你以后就不需要继续了。
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多