首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用.NET内核和Microsoft.Extensions.Configuration读取配置

用.NET内核和Microsoft.Extensions.Configuration读取配置
EN

Stack Overflow用户
提问于 2018-05-11 23:10:35
回答 1查看 3.1K关注 0票数 1

在尝试从多个提供者读取.Net Core2.0项目中的配置时,我并没有得到想要的结果。

我将以下NuGet包添加到股票.Net核心C#项目中以读取配置。这两个版本都安装了2.0.2

安装包Microsoft.Extensions.Configuration.Binder 安装包Microsoft.Extensions.Configuration.Json

这是演示问题的代码。

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        var InMemoryValue = new Dictionary<string, string>()
        {
            ["Configuration.Test1"] = "IndexerValue1",
            ["Configuration.Test2"] = "IndexerValue2",
        };

        var configurationBuilder = new ConfigurationBuilder();
        configurationBuilder
            .AddInMemoryCollection(InMemoryValue)
            .AddJsonFile("Config.json")
            ;
        var configuration = configurationBuilder.Build();

        Console.WriteLine("Indexer");
        Console.WriteLine($"  Test1:{configuration["Configuration.Test1"]}");
        Console.WriteLine($"  Test2:{configuration["Configuration.Test2"]}");
        Console.WriteLine($"  Test3:{configuration["Configuration.Test3"]}");

        var getConfig = configuration.Get<Configuration>();
        Console.WriteLine("Get");
        Console.WriteLine($"  Test1:{getConfig.Test1}");
        Console.WriteLine($"  Test2:{getConfig.Test2}");
        Console.WriteLine($"  Test3:{getConfig.Test3}");

        var bindConfig = new Configuration();
        configuration.GetSection("Configuration").Bind(bindConfig);
        Console.WriteLine("Bind");
        Console.WriteLine($"  Test1:{bindConfig.Test1}");
        Console.WriteLine($"  Test2:{bindConfig.Test2}");
        Console.WriteLine($"  Test3:{bindConfig.Test3}");

        Console.Write("Press [Enter] to end.");
        Console.Read();
    }

    private class Configuration
    {
        public string Test1 { get; set; }
        public string Test2 { get; set; }
        public string Test3 { get; set; }
    }
}

以下是Config.json文件的内容。

代码语言:javascript
复制
{
  "Configuration": {
    "Test1": "JsonValue1",
    "Test3": "JsonValue3"
  }
}

最后,这是输出。

代码语言:javascript
复制
Indexer
  Test1:IndexerValue1
  Test2:IndexerValue2
  Test3:
Get
  Test1:
  Test2:
  Test3:
Bind
  Test1:JsonValue1
  Test2:
  Test3:JsonValue3
Press [Enter] to end.

据我所知,我认为每个部分都应该有JsonValue1IndexerValue2JsonValue3。任何线索都会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-12 20:51:14

正如评论中提到的..。更改对冒号的引用,并省略第二种情况。这似乎是多余的。这是我想出的密码。

代码语言:javascript
复制
class Program
    {
        static void Main(string[] args)
        {
            var InMemoryValue = new Dictionary<string, string>()
            {
                ["Configuration:Test1"] = "IndexerValue1",
                ["Configuration:Test2"] = "IndexerValue2",
            };

            var configurationBuilder = new ConfigurationBuilder();
            configurationBuilder
                .AddInMemoryCollection(InMemoryValue)
                .AddJsonFile("Config.json")
                ;
            var configuration = configurationBuilder.Build();

            Console.WriteLine("Indexer");
            Console.WriteLine($"  Test1:{configuration["Configuration:Test1"]}");
            Console.WriteLine($"  Test2:{configuration["Configuration:Test2"]}");
            Console.WriteLine($"  Test3:{configuration["Configuration:Test3"]}");

            var bindConfig = new Configuration();
            configuration.GetSection("Configuration").Bind(bindConfig);
            Console.WriteLine("Bind");
            Console.WriteLine($"  Test1:{bindConfig.Test1}");
            Console.WriteLine($"  Test2:{bindConfig.Test2}");
            Console.WriteLine($"  Test3:{bindConfig.Test3}");

            Console.Write("Press [Enter] to end.");
            Console.Read();
        }
        public class Configuration
        {
            public string Test1 { get; set; }
            public string Test2 { get; set; }
            public string Test3 { get; set; }
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50301363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档