Ho una classe che contiene il seguente ConfigurationSection:Posso specificare un intervallo con l'attributo IntegerValidator su una configurazione personalizzata?
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; }
}
}
}
Ho poi hanno la seguente nel mio file config:
<configSections>
<section name="TestingComponentSettings"
type="DummyConsole.TestingComponentSettings, DummyConsole"/>
</configSections>
<TestingComponentSettings waitForTimeSeconds="20" loginPage="myPage" />
Quando quindi si tenta di utilizzare questa sezione di configurazione ricevo il seguente errore :
var Testing = ConfigurationManager.GetSection("TestingComponentSettings")
as TestingComponentSettings;
ConfigurationErrorsException was unhandled
The value for the property 'waitForTimeSeconds' is not valid. The error is: The value must be inside the range 1-100.
Se io chan ge il IntegerValidator
di avere un ExcludeRage = true, I (ovviamente) ottenere:
ConfigurationErrorsException was unhandled
The value for the property 'waitForTimeSeconds' is not valid. The error is: The value must not be in the range 1-100
Se quindi modificare il valore della proprietà nel .config per un numero superiore a 100, funziona.
Se cambio il validatore per avere solo un MaxValue
su 100 funziona, ma accetterà anche un valore di -1.
È possibile utilizzare IntegerValidatorAttribute
con un intervallo come questo?
Modifica per aggiungere
Confermato come issue by Microsoft.
Il collegamento Microsoft è stato aggiornato oggi con una soluzione. Apparentemente, se non viene specificato un valore predefinito, utilizza "0" come valore predefinito. 0 è, ovviamente, al di fuori dell'intervallo 1-100. La "soluzione" consiste nell'aggiungere un parametro DefaultValue = all'attributo ConfigurationProperty con un valore predefinito compreso nell'intervallo. Sfortunatamente questo significa che stai imponendo un valore predefinito che potrebbe non essere quello che vuoi/hai bisogno. Ho avuto questo problema anche io. Sono contento di aver imbattuto in questa domanda! – Skrud