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),我们在静态字段中构造一个新实例。
鉴于所有这些,你建议我们改变什么,为什么?
答案 0 :(得分:0)
使用界面来表示配置是一个好主意。但是你的实现看起来有些偏差。
Joshua Flanagan写道,编写应用程序配置代码的方式可以将特定的配置部分注入到代码中。这是一个好主意,因为它真正解耦了您的代码,而不必担心配置背后的细节。 Have a read
我认为这将解决您遇到的问题。可测试性。