避免在代码中直接任意使用ConfigurationManager.AppSettings
2010-10-23 15:46
399 查看
ConfigurationManager.AppSettings可以很方便的获取应用程序配置文件中的内容,如Web.Config。这也导致了在代码中,经常能看见对ConfigurationManager.AppSettings的随意调用。
我们不能假设配置总是正确的,假设配置项是一定存在的,配置项的值一定是正确的。因为手工编辑配置文件,本身没有有效的验证机制,全靠人员自己掌控。当这种不可靠的假设不成立的时候,ConfigurationManager.AppSettings不会给你一个准确的参考。如下面这行代码:
这样,我们就能得到比较清楚的错误提示了。
此外,类不应依赖配置项。在类中处处调用ConfigurationManager.AppSettings,会导致类对配置文件的依赖。比如写单元测试代码时,又得去维护一个配置文件。其实配置项大多配置的是某个对象的属性默认值。我们应该用一个配置类或接口读取配置项值,再注入到要使用配置项的类中。至于采取构造注入,属性注入还是方法注入,就看具体情况了。普通类最好也不要去依赖配置类或配置接口,这种依赖也无太多业务意义。
我们不能假设配置总是正确的,假设配置项是一定存在的,配置项的值一定是正确的。因为手工编辑配置文件,本身没有有效的验证机制,全靠人员自己掌控。当这种不可靠的假设不成立的时候,ConfigurationManager.AppSettings不会给你一个准确的参考。如下面这行代码:
)]public class ConfigSetting { public static int GetMarginX() { return GetIntAppSettings("MarginX"); }
private static String GetStringAppSettings(string name)
{
if (string.IsNullOrEmpty(ConfigurationManager.AppSettings[name]))
{
throw new ConfigurationErrorsException(string.Format("Missing ConfigSetting \"{0}\"", name));
}
return ConfigurationManager.AppSettings[name];
}
private static int GetIntAppSettings(string name)
{
string value = GetStringAppSettings(name);
int result = 0;
if (!Int32.TryParse(value, out result))
{
throw new ConfigurationErrorsException(string.Format("Invalid value in ConfigSetting \"{0}\"", name));
}
return result;
}
}
这样,我们就能得到比较清楚的错误提示了。
此外,类不应依赖配置项。在类中处处调用ConfigurationManager.AppSettings,会导致类对配置文件的依赖。比如写单元测试代码时,又得去维护一个配置文件。其实配置项大多配置的是某个对象的属性默认值。我们应该用一个配置类或接口读取配置项值,再注入到要使用配置项的类中。至于采取构造注入,属性注入还是方法注入,就看具体情况了。普通类最好也不要去依赖配置类或配置接口,这种依赖也无太多业务意义。
相关文章推荐
- 避免在代码中直接任意使用ConfigurationManager.AppSettings
- Asp.Net Core 中无法使用 ConfigurationManager.AppSettings
- (安卓APP)关于使用偏好设置储存数据,首次登录应用到新手指导页,再次登录直接到主页面简单的相关实现代码
- 避免在代码中直接使用delete关键字
- c#读写App.config,ConfigurationManager.AppSettings
- ConfigurationManager.AppSettings Property
- 避免在代码中直接使用delete关键字
- 点点滴滴-ConfigurationManager.AppSettings
- 避免在代码中直接使用delete关键字
- 50个Android开发技巧(2,使用延迟加载以及避免代码重复,include和viewstub)
- asp.net 类库中使用ConfigurationManager.ConnectionStrings
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- java 中使用匿名类直接new接口详解及实例代码
- swift3纯代码任意位置跳转到任何页面,特别适合AppDelegate中
- 建议避免将Entity查询结果直接当IEnumerable使用
- Mybatis Generator Configuration Eclipse自动生成代码工具使用及实现基本crud
- onTouchEvent()方法使用 (直接上代码)
- 使用属性,避免将数据成员直接暴露给外界
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区