假设我有一个看起来像这样的配置属性。请注意,没有默认值。
[ConfigurationProperty("x", IsRequired = true)]
[StringValidator(MinLength = 1)]
public string X
{
get { return (string)this["x"]; }
set { this["x"] = value; }
}
现在我像这样添加我的部分:
<mySection x="123" />
我会收到这个错误:
属性“x”的值无效。错误是:字符串必须至少有 1 个字符长。
如果我将配置属性更改为包含这样的默认值,它将起作用:
[ConfigurationProperty("x", DefaultValue="abc", IsRequired = true)]
[StringValidator(MinLength = 1)]
public string X
{
get { return (string)this["x"]; }
set { this["x"] = value; }
}
这意味着即使 IsRequired 为真,验证器也会验证默认值。这也意味着我必须在我的所有属性上包含一个虚拟默认值才能通过验证,即使它们实际上不会被使用。
这只是糟糕的设计还是这种行为有正当理由?