Hier ist ein Standardszenario:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Das Problem ist, ich bin nicht ganz sicher, welche Ausnahme SomeStandardException
sein sollte.
Ich habe das 3.5 Framework durchgesehen und zwei wahrscheinliche Kandidaten gefunden: ConfigurationException
und ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Die Ausnahme, die ausgelöst wird, wenn ein Konfigurationssystemfehler aufgetreten ist.
Bemerkungen
DieConfigurationException
Ausnahme wird ausgelöst, wenn die Anwendung versucht, Daten in die Konfigurationsdatei zu lesen oder zu schreiben, dies jedoch nicht erfolgreich ist. Einige mögliche Gründe hierfür können fehlerhaftes XML in der Konfigurationsdatei, Dateiberechtigungsprobleme und Konfigurationseigenschaften mit ungültigen Werten sein.Hinweis:
Das
ConfigurationException
Objekt wird aus Gründen der Abwärtskompatibilität beibehalten. DasConfigurationErrorsException
Objekt ersetzt es für das Konfigurationssystem.
Diese Ausnahme klingt eigentlich perfekt für das, was ich brauche, aber sie wurde als veraltet markiert, also ixnay on atthay.
Dies bringt uns zu dem durchaus rätselhaften ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Der aktuelle Wert ist keiner der EnableSessionState-Werte.
Wie Sie sehen können, ist die Dokumentation völlig nutzlos. (Dies ist sowohl in der lokalen als auch in der Online-Hilfe der Fall.) Eine Untersuchung der Klasse selbst zeigt, dass es für das, was ich will, ein drastischer Overkill ist.
Kurz gesagt, ich benötige eine Standardausnahme, die ausgelöst werden sollte, wenn eine Anwendungskonfigurationseinstellung fehlt oder einen ungültigen Wert enthält. Sie würden denken, dass das Framework eine solche Ausnahme für Anwendungen enthält. (Anscheinend, aber es wurde als veraltet markiert und durch etwas viel Größeres ersetzt.)
Welche Lösungen, wenn überhaupt, benutzt ihr dafür, und muss ich es aufsaugen und meine eigene Ausnahme dafür rollen?
Nachträge bearbeiten
Einige haben gefragt, ob ich einen Standardwert angeben könnte oder nicht, und fahren fort. In bestimmten Fällen ja, und in diesen Fällen wird die Ausnahme nicht ausgelöst. Für bestimmte Einstellungen gilt dies jedoch nicht. Zum Beispiel: Datenbankservernamen und -anmeldeinformationen, Authentifizierungsserver und Pfade zu installierten Anwendungen von Drittanbietern.
Es ist auch erwähnenswert, dass die Anwendung, an der ich hauptsächlich arbeite, eine Konsolenanwendung ist, die im Batch-Modus ausgeführt wird, und ich möchte, dass sie eine Ausnahme auslöst, die von der Hauptmethode abgefangen und entsprechend protokolliert wird, wenn das Objekt nicht ordnungsgemäß konfiguriert ist. (Es ist Legacy-Code, den ich geerbt habe und der derzeit nur davon ausgeht, dass alles pfirsichfarben ist.)
System.Configuration.ConfigurationErrorsException
wurde aktualisiert.