这是一个标准方案:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
问题是,我不确定 SomeStandardException
应该是哪个例外。
我仔细研究了3.5 Framework,发现了两个可能的候选对象: ConfigurationException
和ConfigurationErrorsException
。
System.Configuration.ConfigurationException
发生配置系统错误时引发的异常。
备注
的ConfigurationException
如果应用程序试图读取或写入数据到配置文件,但不成功则抛出异常。造成这种情况的一些可能原因包括配置文件中的XML格式错误,文件权限问题以及带有无效值的配置属性。注意:
ConfigurationException
维护该对象是为了向后兼容。该ConfigurationErrorsException
对象将其替换为配置系统。
实际上,此异常听起来很适合我的需要,但已被标记为过时,因此,ixthay on atthay。
这使我们深感困惑ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
当前值不是EnableSessionState值之一。
如您所见,其文档完全没有用。(在本地和在线帮助中都是这种方式。)对课程本身的检查表明,这对于我想要的内容来说是过分的杀伤力。
简而言之,我需要在应用程序配置设置丢失或包含无效值时引发的标准异常。您可能认为框架中有这样的异常供应用程序使用。(它确实做到了,但已被标记为过时,并被很多东西所取代。范围较大。)
你们使用什么解决方案(如果有的话),我是否将不得不吸收它并为此提出自己的例外?
编辑附录
有人问我是否可以提供默认值,然后继续。在某些情况下,是的,在这些情况下,不会引发异常。但是,对于某些设置,这将不适用。例如:数据库服务器名称和凭据,身份验证服务器以及已安装的第三方应用程序的路径。
还值得注意的是,我主要处理的应用程序是以批处理模式运行的控制台应用程序,并且我希望它引发一个异常,该异常会被main方法捕获并在未正确配置的情况下正确记录。(这是我继承的旧版代码,目前仅假设所有内容都是桃花心的。)
System.Configuration.ConfigurationErrorsException
已更新。