Oto standardowy scenariusz:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Problem w tym, że nie jestem do końca pewien, który wyjątek SomeStandardException
powinien być.
Przejrzałem 3.5 Framework i znalazłem dwóch prawdopodobnych kandydatów: ConfigurationException
i ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Wyjątek, który jest generowany, gdy wystąpił błąd systemu konfiguracji.
Uwagi
ConfigurationException
Jest wyjątek, gdy aplikacja próbuje odczytać dane lub zapisu pliku konfiguracyjnego, ale nie powiodło się. Niektóre możliwe przyczyny mogą obejmować nieprawidłowy format XML w pliku konfiguracyjnym, problemy z uprawnieniami do plików i właściwości konfiguracyjne z nieprawidłowymi wartościami.Uwaga:
ConfigurationException
Przedmiot jest utrzymywany przez kompatybilności wstecznej.ConfigurationErrorsException
Przedmiot zastępuje go do konfiguracji systemu.
Ten wyjątek faktycznie brzmi idealnie dla tego, czego potrzebuję, ale został oznaczony jako przestarzały, więc ixnay on atthay.
To prowadzi nas do całkowicie zagadkowego ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Bieżąca wartość nie jest jedną z wartości EnableSessionState.
Jak widać, jego dokumentacja jest całkowicie bezużyteczna. (Tak jest zarówno w pomocy lokalnej, jak i online). Analiza samej klasy pokazuje, że jest to drastyczna przesada, jeśli chodzi o to, czego chcę.
Krótko mówiąc, potrzebuję standardowego wyjątku, który powinien zostać wyrzucony, gdy brakuje ustawienia konfiguracji aplikacji lub zawiera nieprawidłową wartość. Można by pomyśleć, że Framework zawiera taki wyjątek, aby można było z niego korzystać. (Najwyraźniej tak, ale oznaczono go jako przestarzały i zastąpiono go czymś o wiele większym zakresie.)
Jakie rozwiązania, jeśli w ogóle, używacie do tego i czy będę musiał to wciągnąć i rzucić własny wyjątek?
Edytuj dodatki
Niektórzy pytali, czy mogę podać wartość domyślną, i kontynuują. W niektórych przypadkach tak, iw takich przypadkach wyjątek nie zostałby zgłoszony. Jednak w przypadku niektórych ustawień nie będzie to miało zastosowania. Na przykład: nazwy i poświadczenia serwera bazy danych, serwery uwierzytelniające i ścieżki do zainstalowanych aplikacji innych firm.
Warto również zauważyć, że aplikacja, nad którą głównie pracuję, jest aplikacją konsolową działającą w trybie wsadowym i chcę, aby rzucała wyjątek, który jest przechwytywany przez główną metodę i odpowiednio rejestrowany, jeśli coś nie jest odpowiednio skonfigurowane. (Jest to starszy kod, który odziedziczyłem i obecnie po prostu zakłada, że wszystko jest brzoskwiniowe).
System.Configuration.ConfigurationErrorsException
została zaktualizowana.