Voici un scénario standard:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Le problème est que je ne suis pas tout à fait sûr de savoir quelle exception SomeStandardException
devrait être.
J'ai parcouru le cadre 3.5 et j'ai trouvé deux candidats probables: ConfigurationException
et ConfigurationErrorsException
.
System.Configuration.ConfigurationException
L'exception qui est levée lorsqu'une erreur du système de configuration s'est produite.
Remarques
L'ConfigurationException
exception est levée si l'application tente de lire ou d'écrire des données dans le fichier de configuration mais échoue. Certaines raisons possibles à cela peuvent inclure un XML malformé dans le fichier de configuration, des problèmes d'autorisation de fichier et des propriétés de configuration avec des valeurs non valides.Remarque:
L'
ConfigurationException
objet est conservé à des fins de compatibilité descendante. L'ConfigurationErrorsException
objet le remplace pour le système de configuration.
Cette exception semble en fait parfaite pour ce dont j'ai besoin, mais elle a été marquée comme obsolète, donc, ixnay sur atthay.
Cela nous amène au tout à fait déroutant ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
La valeur actuelle ne fait pas partie des valeurs EnableSessionState.
Comme vous pouvez le voir, sa documentation est totalement inutile. (C'est comme ça dans l'aide locale et en ligne.) Un examen de la classe elle-même montre que c'est excessivement excessif pour ce que je veux.
En un mot, j'ai besoin d'une exception standard qui doit être levée lorsqu'un paramètre de configuration d'application est manquant ou contient une valeur non valide. On pourrait penser que le Framework contenait une telle exception pour les applications à utiliser. (C'est apparemment le cas, mais il a été marqué comme obsolète et a été remplacé par quelque chose de beaucoup plus large.)
Quelles solutions, le cas échéant, utilisez-vous pour cela, et vais-je devoir les aspirer et lever ma propre exception pour cela?
Modifier les addenda
Certains ont demandé si je pouvais ou non fournir une valeur par défaut et continuer. Dans certains cas, oui, et dans ces cas, l'exception ne serait pas levée. Cependant, pour certains paramètres, cela ne s'appliquera pas. Par exemple: noms et informations d'identification du serveur de base de données, serveurs d'authentification et chemins d'accès aux applications tierces installées.
Il convient également de noter que l'application sur laquelle je travaille principalement est une application console s'exécutant en mode batch, et je veux qu'elle lève une exception qui est interceptée par la méthode principale et enregistrée de manière appropriée si la chose n'est pas correctement configurée. (C'est du code hérité que j'ai hérité, et suppose actuellement que tout est parfait.)
System.Configuration.ConfigurationErrorsException
a été mise à jour.