Как я могу улучшить наши ссылки CM.AppSettings - PullRequest
1 голос
/ 03 марта 2010

ASP.NET 3.5

Классы в нашем решении ссылались на ConfigurationManater.AppSettings [""], чтобы получить appSettings (из web.config).

Мы решили, что нас это не устраивает. Люди неправильно набирали appSetting имена ключей в коде (который прекрасно компилировался), и было неудобно отслеживать использование. И затем есть дублированные строки по всей базе кода, когда вы ссылаетесь на одни и те же настройки приложения повсюду.

Итак, мы решили, что только одному классу будет разрешено ссылаться на 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), мы создаем новый экземпляр в статическое поле.

Учитывая все это, что бы вы порекомендовали нам изменить и почему?

1 Ответ

0 голосов
/ 05 марта 2010

Использование интерфейса для представления конфигурации - хорошая идея. Но ваша реализация выглядит немного не так.

Джошуа Фланаган писал о написании кода конфигурации приложения таким образом, чтобы в ваш код могли быть вставлены определенные разделы конфигурации. Это хорошая идея, так как она действительно отделяет ваш код от беспокойства о деталях конфигурации. Прочитайте .

Я думаю, что это решит проблему, с которой вы столкнулись. проверяемость.

...