c#如何预先验证所有ConfigurationElement属性?

时间:2017-10-27 16:35:41

标签: c# .net app-config

我有几个自定义配置元素(从ConfigurationElement派生的类),一些属性具有验证属性,其他属性为枚举类型。

问题是可以正确创建配置对象,但只有在访问属性时才会引发异常。 (在这种情况下,字符串不会解析为任何已知的枚举值。)

我的问题是,我可以以某种方式确保程序启动时我的app.config文件中的任何自定义部分都没有问题吗?

谢谢,拉德克

1 个答案:

答案 0 :(得分:1)

鉴于此示例ConfigurationSection包含enum

public class MyConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty(name: "myProperty")]
    public TestEnum MyProperty => 
        (TestEnum) Enum.Parse(typeof(TestEnum), Convert.ToString(base["myProperty"]));
}

public enum TestEnum
{
    A = 1, B = 2
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="myConfigurationSection" 
             type="ValidatedConfigurationSection.MyConfigurationSection,
                   ValidatedConfigurationSection"/>
  </configSections>

  <myConfigurationSection myProperty="NoSuchValueInEnum"/>
</configuration>

如果enum值无效(需要System.ComponentModel.DataAnnotations,则会抛出异常。)

private void ValidateSection(object section)
{
    var context = new ValidationContext(section);
    Validator.ValidateObject(section, context);
}

不需要对象本身的验证属性。