ASP.NET 3.5
ソリューション全体のクラスは ConfigurationManater.AppSettings[""] を参照して appSettings を取得しました (web.config から)。
私たちはそれに満足していないと判断しました。コード内で appSetting のキー名をタイプミスする人がいて (問題なくコンパイルされました)、使用状況を追跡するのが面倒でした。そして、どこでも同じ appSettings を参照しているため、コードベース全体に重複した文字列があります。
そのため、ConfigurationManager を参照できるのは 1 つのクラスのみであり、ソリューションの残りの部分は、特定の 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 など) を挿入できない場所では、静的フィールドに新しいインスタンスを構築します。
これらすべてを考慮して、何を変更することをお勧めしますか? また、その理由は何ですか?