Я думаю, что написание собственного провайдера app.config - простая задача, которая полезнее всего остального.Особенно вам следует избегать любых подделок, таких как прокладки и т. Д., Потому что, как только вы их используете, Edit & Continue больше не работает.
Поставщики, которых я использую, выглядят так:
По умолчанию они получают значенияиз App.config
, но для модульных тестов я могу переопределить все значения и использовать их в каждом тесте независимо.
Нет необходимости в каких-либо интерфейсах или реализовывать их каждый раз снова и снова.У меня есть утилита DLL и использую этот маленький помощник во многих проектах и модульных тестах.
public class AppConfigProvider
{
public AppConfigProvider()
{
ConnectionStrings = new ConnectionStringsProvider();
AppSettings = new AppSettingsProvider();
}
public ConnectionStringsProvider ConnectionStrings { get; private set; }
public AppSettingsProvider AppSettings { get; private set; }
}
public class ConnectionStringsProvider
{
private readonly Dictionary<string, string> _customValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
public string this[string key]
{
get
{
string customValue;
if (_customValues.TryGetValue(key, out customValue))
{
return customValue;
}
var connectionStringSettings = ConfigurationManager.ConnectionStrings[key];
return connectionStringSettings == null ? null : connectionStringSettings.ConnectionString;
}
}
public Dictionary<string, string> CustomValues { get { return _customValues; } }
}
public class AppSettingsProvider
{
private readonly Dictionary<string, string> _customValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
public string this[string key]
{
get
{
string customValue;
return _customValues.TryGetValue(key, out customValue) ? customValue : ConfigurationManager.AppSettings[key];
}
}
public Dictionary<string, string> CustomValues { get { return _customValues; } }
}