Aqui está um cenário padrão:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
O problema é que não tenho muita certeza de qual exceção SomeStandardException
deve ser.
Examinei o Framework 3.5 e encontrei dois prováveis candidatos: ConfigurationException
e ConfigurationErrorsException
.
System.Configuration.ConfigurationException
A exceção que é lançada quando ocorre um erro no sistema de configuração.
Observações
AConfigurationException
exceção será lançada se o aplicativo tentar ler ou gravar dados no arquivo de configuração, mas não tiver êxito. Alguns motivos possíveis para isso podem incluir XML malformado no arquivo de configuração, problemas de permissão de arquivo e propriedades de configuração com valores inválidos.Nota:
O
ConfigurationException
objeto é mantido para compatibilidade com versões anteriores. OConfigurationErrorsException
objeto o substitui pelo sistema de configuração.
Essa exceção realmente parece perfeita para o que eu preciso, mas foi marcada como obsoleta.
Isso nos leva ao intrigante ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
O valor atual não é um dos valores EnableSessionState.
Como você pode ver, sua documentação é completamente inútil. (É assim na ajuda local e on-line.) Um exame da turma mostra que é um exagero drástico para o que eu quero.
Em poucas palavras, preciso de uma exceção padrão que deve ser lançada quando uma configuração do aplicativo estiver ausente ou contiver um valor inválido. Você pensaria que o Framework tivesse uma exceção para os aplicativos. (Aparentemente, mas foi marcado como obsoleto e foi substituído por algo muito maior em escopo.)
Quais soluções, se houver, vocês estão usando para isso, e eu vou ter que aceitar e lançar minha própria exceção?
Editar Adendos
Alguns perguntaram se eu poderia ou não fornecer um valor padrão e continuar. Em certos casos, sim, e nesses casos, a exceção não seria lançada. No entanto, para determinadas configurações, isso não se aplica. Por exemplo: nomes e credenciais do servidor de banco de dados, servidores de autenticação e caminhos para aplicativos de terceiros instalados.
Também vale a pena notar que o aplicativo no qual estou trabalhando principalmente é um aplicativo de console em execução no modo em lote e quero que ele lance uma exceção capturada pelo método principal e registrada adequadamente se a coisa não estiver configurada adequadamente. (É o código legado que eu herdei e atualmente apenas assume que tudo é pêssego.)
System.Configuration.ConfigurationErrorsException
foi atualizada.