2010-11-10 2 views
6

Je vous écris ma propre section de configuration personnalisée et ont un ConfigurationProperty défini dans un ConfigurationElement comme ceci:insuffisance RegexStringValidator inattendue dans ConfigurationProperty dans ConfigurationElement personnalisé

[ConfigurationProperty("startTime", IsRequired = false)] 
[RegexStringValidator("\\d{2}:\\d{2}:\\d{2}")] 
public string StartTime 
{ 
    get 
    { 
     return (string) this["startTime"]; 
    } 

    set 
    { 
     this["startTime"] = value; 
    } 
} 

Je comptais pouvoir entrer des valeurs telles que « 23 : 30: 00 "dans l'attribut startTime du ConfigurationElement que j'ai créé. Cependant, chaque fois que j'essaie de charger ma section de configuration, j'obtiens une exception ConfigurationErrorsException avec le message:

La valeur de la propriété 'startTime' n'est pas valide. L'erreur est la suivante: La valeur n'est pas conforme à la chaîne de regex de validation '\ d {2}: \ d {2}: \ d {2}'.

Je dois admettre que je lutte toujours avec des expressions régulières, mais celui-ci est assez simple et je l'ai écrit un test pour vérifier que mon modèle devrait valider les types de valeurs que je me attends:

var regex = new Regex(@"\d{2}:\d{2}:\d{2}", RegexOptions.Compiled); 
var isSuccess = regex.Match("23:30:00").Success; 

isSuccess évalue à True, donc je ne suis pas tout à fait sûr pourquoi le ConfigurationErrorsException est levé.

En tant que référence, voici ma section de configuration de mon fichier App.config:

<windowsServiceConfiguration> 
    <schedule startTime = "23:00:00" /> 
</windowsServiceConfiguration> 

Toute aide à pourquoi je ne peux pas obtenir le RegexStringValidator de travailler serait apprécié. Merci.

+0

En fait, il me semble avoir un problème avec les validateurs en général. J'ai un problème similaire avec le TimeSpanValidator. Je décore une propriété et fixe une gamme. La valeur dans le fichier de configuration est définitivement dans la fourchette et je reçois une exception disant que ma valeur est hors limites. – Jed

Répondre

15

Essayez de définir la valeur par défaut qui passera la validation:

[ConfigurationProperty("startTime", IsRequired = false, DefaultValue = "00:00:00")] 
[RegexStringValidator(@"\d{2}:\d{2}:\d{2}")] 
public string StartTime 
{ 
    get 
    { 
     return (string) this["startTime"]; 
    } 

    set 
    { 
     this["startTime"] = value; 
    } 
} 
+0

Merci! Votre suggestion a définitivement fait en sorte que toutes les validations fonctionnent. – Jed

+0

+1 - Permettez-moi juste d'ajouter que même si vous avez déjà défini une valeur par défaut (de travail) sur un objet ConfigurationProperty, vous devez en définir un sur ConfigurationPropertyAttribute. (Mais l'inverse n'est pas vrai) – Paul

+0

Merci pour l'aide, eu exactement le même problème et en ajoutant une valeur par défaut le fixe. –

0

Je me demande si l'indirection de la propriété nécessite un double échappement du contenu. Si oui, au lieu de:

"\\d{2}:\\d{2}:\\d{2}" 

utilisation:

@"\\d{2}:\\d{2}:\\d{2}" 

Ordinarly Je pense que c'est trop, mais lui donner un essai.

+0

C'est trop. Le modèle, "\\ d {2}: \\ d {2}: \\ d {2}", est équivalent à @ "\ d {2}: \ d {2}: \ d {2}". Merci pour la suggestion, cependant. – Jed

Questions connexes