dotnet核心配置中的绑定验证器

时间:2018-02-22 22:21:41

标签: c# .net-core asp.net-core-2.0

我目前正在学习dotnet core 2.0(控制台应用),我正在进行配置。 我尝试使用json配置我的应用程序,这个json绑定在一个类上。它工作正常,但如果键不在json文件中,它似乎只使用默认值填充。在这种情况下,是否有一种简单的方法可以告诉系统抛出异常?

目前我通过使用反射来解决这个问题,但也许有人有更好的解决方案?

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Configuration;

namespace ConsoleApp2
{
    public class EnvironmentSettings
    {
        public int ValueOne { get; set; }
        public int ValueTwo { get; set; }
    }

    class Program
    {   
        static void Main(string[] args)
        {
            EnvironmentSettings testsetting = new EnvironmentSettings();
            var builder = new ConfigurationBuilder();
            builder.SetBasePath(@"C:\Users\username\source\repos\ConsoleApp2\ConsoleApp2\");
            builder.AddJsonFile("TestConfig.json", false);
            var build = builder.Build();

            var child = build.GetChildren();
            foreach(string key in typeof(EnvironmentSettings).GetProperties().Select(s=>s.Name))
            {
                if(!child.Any(item => item.Key == key))
                {
                    throw new KeyNotFoundException($"Configuration value with key '{key}' does not exist");
                }
            }

            build.Bind(testsetting);
            Console.WriteLine($"{testsetting.ValueOne} - {testsetting.ValueTwo}");
            Console.ReadLine();
        }
    }
}

这是我的json文件

{
    "ValueOne": 1
}

如果可能的话,这是我不想改变的部分:

var child = build.GetChildren();
foreach(string key in typeof(EnvironmentSettings).GetProperties().Select(s=>s.Name))
{
    if(!child.Any(item => item.Key == key))
    {
        throw new KeyNotFoundException($"Configuration value with key '{key}' does not exist");
    }
}

0 个答案:

没有答案