このような構成プロパティがあるとしましょう。デフォルト値がないことに注意してください。
[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がtrueの場合でも、バリデーターがデフォルト値を検証することを意味します。また、実際には使用されない場合でも、検証に合格するには、すべてのプロパティにダミーのデフォルト値を含める必要があることも意味します。
これは単に悪い設計ですか、それともこの動作の正当な理由がありますか?