CallbackValidator called with empty string
- by Paolo Tedesco
I am writing a custom configuration section, and I would like to validate a configuration property with a callback, like in this example:
using System;
using System.Configuration;
class CustomSection : ConfigurationSection {
[ConfigurationProperty("stringValue", IsRequired = false)]
[CallbackValidator(Type = typeof(CustomSection), CallbackMethodName = "ValidateString")]
public string StringValue {
get { return (string)this["stringValue"]; }
set { this["stringValue"] = value; }
}
public static void ValidateString(object value) {
if (string.IsNullOrEmpty((string)value)) {
throw new ArgumentException("string must not be empty.");
}
}
}
class Program {
static void Main(string[] args) {
CustomSection cfg = (CustomSection)ConfigurationManager.GetSection("customSection");
Console.WriteLine(cfg.StringValue);
}
}
And my App.config file looks like this:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="customSection" type="CustomSection, config-section"/>
</configSections>
<customSection stringValue="lorem ipsum"/>
</configuration>
My problem is that when the ValidateString function is called, the value parameter is always an empty string, and therefore the validation fails. If i just remove the validator, the string value is correctly initialized to the value in the configuration file.
What am I missing?