Использовать внедрение зависимостей для Properties.Settings.Default? - PullRequest
5 голосов
/ 19 августа 2011

Следует ли рассматривать использование Properties.Settings.Default в классе как зависимость и, следовательно, внедрять его?

например:.

public class Foo
{
    private _settings;
    private bool _myBool;

    public Foo(Settings settings)
    {
        this._settings = settings;
        this._myBool = this._settings.MyBool;
    }
}

.
,

или вы считаете использование Settings глобальным приложением хорошей практикой?

например:.

public class Foo
{
    private bool _myBool;

    public Foo()
    {
        this._myBool = Properties.Settings.Default.MyBool;
    }
}

Ответы [ 3 ]

4 голосов
/ 20 августа 2011

Я бы выбрал «ничего из вышеперечисленного» и ввел бы логическое значение напрямую:

public class Foo
{
    private readonly bool _myBool;

    public Foo(bool myBool)
    {
        _myBool = myBool;
    }
}

Это отделяет Foo от знания любой инфраструктуры, которая поддерживает получение логического значения. Foo не имеет смысла вносить сложность в зависимости от объекта настроек, особенно если он содержит другие несвязанные значения.

2 голосов
/ 19 августа 2011

Вы можете инкапсулировать настройки в классе и иметь интерфейс для них. Таким образом, ваши настройки могут быть изменены для таких вещей, как модульное тестирование. Если вы также используете контейнер IoC, то обязательно зарегистрируйте настройки в контейнере.

Я делаю это для ConfigurationManager и WebConfigurationManager, чтобы вводить настройки для тестов. Натан Глойн обернул адаптеры и интерфейс уже в проекте , который можно использовать, если вы тоже хотите это сделать.

2 голосов
/ 19 августа 2011

Они должны быть переданы как зависимость.Представьте себе сценарий, когда вы хотите изменить этот набор настроек с помощью модульного теста в вашем примере №2 - вам нужно будет иметь какую-то сложную логику переключения в геттере статических свойств, чтобы учесть это.

Многие контейнеры IoC могут даже предоставлять одноэлементную реализацию при внедрении таких классов, чтобы помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...