首页 > 解决方案 > Asp.Net Core 3.1 多个依赖的自定义配置提供程序

问题描述

要从自定义配置提供程序开始,我们会将此代码添加到 Program.CreateHostBuilder:

.ConfigureAppConfiguration((builderContext, config) =>
                {
                    config.AddMyConfiguration(options =>
                    {
                        options.ConnectionString = "Data Source=sqlite.db";
                        options.Query = @"SELECT Key, Value FROM SYS_CONFIGS";
                    });
                });

(只是一个例子,不是我实际在做什么)。但是,如果我们需要添加另一个自定义配置提供程序,并且对远程数据的请求取决于来自第一源的值已经可用怎么办?因此,除了上述内容之外,还出现在 Program.CreateHostBuilder 中:

.ConfigureAppConfiguration((builderContext, config) =>
                {
                    config.AddMySecondConfiguration(options =>
                    {
                        options.ConnectionString = "<some value received from first custom config>";
                        options.Query = "<some value received from first custom config>";
                    });
                });

标签: c#asp.net-core

解决方案


我认为您需要在第二个配置提供程序中构建 configurationBuilder。

尝试这个:

.ConfigureAppConfiguration((context, configurationBuilder) =>
{
    configurationBuilder.AddInMemoryCollection(new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("first", "value")
    });

    configurationBuilder.AddInMemoryCollection(new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("second", configurationBuilder.Build().GetValue<string>("first"))
    });
    
    var test = configurationBuilder.Build().GetValue<string>("second"); // "value"
})

但是你为什么要这样做呢?在一个自定义配置提供程序中处理所有这些逻辑不是更好吗?获取您需要的数据然后采取相应的行动?您能否在这里解释一下您要解决的问题?


推荐阅读