我有几个自定义配置元素(从ConfigurationElement派生的类),一些属性具有验证属性,其他属性为枚举类型。
问题是可以正确创建配置对象,但只有在访问属性时才会引发异常。 (在这种情况下,字符串不会解析为任何已知的枚举值。)
我的问题是,我可以以某种方式确保程序启动时我的app.config文件中的任何自定义部分都没有问题吗?
谢谢,拉德克
答案 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);
}
不需要对象本身的验证属性。