Я могу указать диапазон с атрибутом IntegerValidator на пользовательском ConfigurationSection?

У меня есть класс, содержащий следующий 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 файле:


  

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

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

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

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

Если я изменяюсь IntegerValidator чтобы иметь ExcludeRage = верный, я (очевидно), добираюсь:

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

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

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

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

Действительно ли возможно использовать IntegerValidatorAttribute с диапазоном как это?

Редактирование для добавления

Подтвержденный как выпуск Microsoft.

8
задан Zhaph - Ben Duguid 26 January 2010 в 08:39
поделиться

1 ответ

AS Skrud Указывает, MS обновила проблему CONNECT:

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

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

  [ConfigurationProperty («WaitFortimeseconds», isrequired = true,
  Defaultvalue = "10")]
 

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

16
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: