关于.net:c#如何预先验证所有ConfigurationElement属性?

c# how to validate all ConfigurationElement properties upfront?

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

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

我的问题是,在程序启动时,我能否确保在继续之前,app.config文件中的任何自定义部分都没有问题?

谢谢,Radek


鉴于该样本含有enumConfigurationSection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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),则会引发异常。

1
2
3
4
5
private void ValidateSection(object section)
{
    var context = new ValidationContext(section);
    Validator.ValidateObject(section, context);
}

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