ASP.NET 3.5
我们解决方案中的类引用了 ConfigurationManater.AppSettings[""] 来获取 appSettings(来自 web.config)。
我们决定对此不满意。人们在代码中输入错误的 appSetting 键名(编译良好),而且跟踪使用情况很麻烦。当您在各处引用相同的 appSettings 时,整个代码库中都会出现重复的字符串。
因此,我们决定只允许一个类引用 ConfigurationManager,当需要某个 appSetting 的值时,解决方案的其余部分将引用该类。ConfigurationManater.AppSettings[""] 是静态的,因此我们从单个 Settings 类中公开了一堆静态只读属性。
public class Settings {
public static string Foo {
get {
return ConfigurationManager.AppSettings["Foo"];
}
}
}
这工作得很好,直到我们需要在测试中模拟设置。我们创建了一个接口来启用我们的模拟(这是任何类型的错误吗?)。
public interface ISettings {
string Foo {
get;
set;
}
}
public class Settings : ISettings {
public string Foo {
get {
return ConfigurationManager.AppSettings["Foo"];
}
}
}
现在我们将 ISettings 实例作为使用设置值的对象的依赖项注入(类/接口位于每个人都可以毫无问题地引用的项目中)。
在我们无法注入现有实例的地方(例如 Global.asax),我们在静态字段中构造一个新实例。
鉴于所有这些,您会建议我们改变什么,为什么?