使用.NET Core和Microsoft.Extensions.Configuration读取配置

时间:2018-05-11 23:10:35

标签: c# .net-core

尝试从多个提供程序读取.Net Core 2.0项目中的配置时,我无法获得所需的结果。

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

  

安装包Microsoft.Extensions.Configuration.Binder

     

Install-Package Microsoft.Extensions.Configuration.Json

这是演示问题的代码。

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文件的内容。

{
  "Configuration": {
    "Test1": "JsonValue1",
    "Test3": "JsonValue3"
  }
}

最后,这是输出。

Indexer
  Test1:IndexerValue1
  Test2:IndexerValue2
  Test3:
Get
  Test1:
  Test2:
  Test3:
Bind
  Test1:JsonValue1
  Test2:
  Test3:JsonValue3
Press [Enter] to end.

据我了解,我相信我应该在每个部分都获得JsonValue1IndexerValue2JsonValue3。 任何线索将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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; }
        }
    }