Я очень люблю и использую библиотеку конфигурации 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