Могу ли я указать диапазон с атрибутом IntegerValidator в пользовательском ConfigurationSection? - PullRequest
7 голосов
/ 21 января 2010

У меня есть класс, содержащий следующее ConfigurationSection :

namespace DummyConsole {
  class TestingComponentSettings: ConfigurationSection {

    [ConfigurationProperty("waitForTimeSeconds", IsRequired=true)]
    [IntegerValidator(MinValue = 1, MaxValue = 100, ExcludeRange = false)]
    public int WaitForTimeSeconds
    {
        get { return (int)this["waitForTimeSeconds"]; }
        set { this["waitForTimeSeconds"] = value; }
    }

    [ConfigurationProperty("loginPage", IsRequired = true, IsKey=false)]
    public string LoginPage
    {
        get { return (string)this["loginPage"]; }
        set { this["loginPage"] = value; }
    }
  }
}

У меня в файле .config есть следующее:

<configSections>
  <section name="TestingComponentSettings" 
           type="DummyConsole.TestingComponentSettings, DummyConsole"/>
</configSections>
<TestingComponentSettings waitForTimeSeconds="20" loginPage="myPage" />

Когда я пытаюсь использовать этот раздел конфигурации, я получаю следующую ошибку:

var Testing = ConfigurationManager.GetSection("TestingComponentSettings")
             as TestingComponentSettings;

ConfigurationErrorsException не обработано

Недопустимое значение свойства 'waitForTimeSeconds'. Ошибка: значение должно быть в диапазоне 1-100.

Если я изменю IntegerValidator на ExcludeRage = true, я (очевидно) получу:

ConfigurationErrorsException не обработано

Недопустимое значение для свойства waitForTimeSeconds. Ошибка: значение не должно быть в диапазоне 1-100

Если я затем изменю значение свойства в .config на число выше 100, оно будет работать.

Если я заменим валидатор на MaxValue, равный 100, он будет работать, но также примет значение -1. ​​

Можно ли использовать IntegerValidatorAttribute с таким диапазоном?

Изменить, чтобы добавить

Подтверждено как проблема Microsoft .

1 Ответ

15 голосов
/ 28 января 2010

Как указывает Скруд , MS обновила проблему подключения:

Сообщаемая проблема связана с причудой в том, как система конфигурации обрабатывает валидаторы. Каждое числовое свойство конфигурации имеет значение по умолчанию, даже если оно не указано. Если значение по умолчанию не указано, используется значение 0. В этом примере свойство конфигурации заканчивается значением по умолчанию, которое находится за пределами допустимого диапазона, указанного целочисленным валидатором. В результате синтаксический анализ конфигурации всегда завершается неудачей.

Чтобы исправить это, измените определение свойства конфигурации, добавив значение по умолчанию в диапазоне от 1 до 100:

[ConfigurationProperty("waitForTimeSeconds", IsRequired=true, 
                       DefaultValue="10")]

Это означает, что свойство будет иметь значение по умолчанию, но на самом деле я не рассматриваю это как главную проблему - мы говорим, что оно должно иметь значение, попадающее в «разумный» диапазон, и должно быть подготовлено установить разумное значение по умолчанию.

...