Рекомендации по созданию файлов подключения

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

public class ServerConfiguration: ConfigurationSection
{
    [ ConfigurationProperty( FOO, DefaultValue = "", IsRequired = false ) ]
    public string FOO
    {
        get { return (string)this[FOO]; }
        set { this[FOO] = value; }
    }
}

это то, что я делаю для файлов конфигурации, и у меня также есть некоторая иерархия наследования.

Что вы используете для обработки конфигураций и каковы передовые методы для этой цели?


person DarthVader    schedule 18.07.2011    source источник
comment
Выглядит довольно хорошо для меня. Я предполагаю, что он должен быть статичным и одноэлементным, но в остальном нечего улучшать.   -  person Yuck    schedule 18.07.2011
comment
@Yuck Singletons усложняют модульное тестирование, пользователь интерфейсов и IoC дает гораздо больше гибкости   -  person Bronumski    schedule 20.07.2011


Ответы (1)


Я люблю и широко использую библиотеку конфигурации Microsoft, но стараюсь, чтобы мои приложения не зависели от нее. Обычно это связано с тем, что мой раздел конфигурации реализует интерфейс, поэтому ваш пример будет выглядеть так:

public class ServerConfiguration : ConfigurationSection, IServerConfiguration
{
    [ ConfigurationProperty( FOO, DefaultValue = "", IsRequired = false ) ]
    public string FOO
    {
        get { return (string)this[FOO]; }
        set { this[FOO] = value; }
    }
}

public interface IServerConfiguration
{
    public string FOO { get; } //Unless I am updating the config in code I don't use set on the interface
}

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

Если вы используете раздел конфигурации, вы также зависите от ConfigurationManager. Я скрыл это из своего кода, используя IConfigurationProvider[T], где T будет IServerConfiguration, вы можете увидеть пример этого в моем блоге в разделе незнание конфигурации.

http://bronumski.blogspot.com/search/label/Configuration

person Bronumski    schedule 18.07.2011