ConfigSettings позволяет вынести настройки в отдельный файл и настроить их синхронизацию с Web.config или другими конфигурационными файлами.
-
Подключить NuGet пакет:
Install-Package ConfigSettings
-
Создать файл
_ConfigSettings.xml
рядом с приложением:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<var name="DATABASE_ENGINE" value="mssql" />
</settings>
- Добавить в
Program.cs
код для чтения этой настройки:
ConfigSettingsGetter configSettingsGetter = new ConfigSettingsGetter();
string dbEngine = configSettingsGetter.Get<string>("DATABASE_ENGINE");
Настройка DATABASE_ENGINE
будет считана из файла _ConfigSettings.xml
в переменную dbEngine
.
-
Чтение настроек из
xml
файла в определённую структуру.- В будущем планируется добавить поддержку
json
формата.
- В будущем планируется добавить поддержку
-
Живое отслеживание изменений в настройках.
-
Слияние или импорт нескольких
_ConfigSettings.xml
:<import from="путь/до/другого/файла.xml">
-
Поддержка нескольких типов настроек:
Для простых типов, которые не нуждаются в сложной сериализации, используется элемент:
<var name="DATABASE_ENGINE" value="mssql" />
Для сложных типов или для группировки списка настроек предлагается использовать блоки:
<block name="testBlockName"> <tenant name="alpha" db="alpha_db" /> <tenant name="beta" user="alpha_user" /> </block>
-
Автоматический поиск пути до файла с настройками.
-
Если не передать путь к файлу явно, то будет использоваться первый попавшийся файл, заканчивающийся на
_configsettings.xml
без учёта регистра. -
Поиск будет производится по всей иерархии папок вверх (примерно такой же алгоритм используется в
msbuild.exe
при поискеDirectory.Build.props
).
-
-
Runtime изменение
App.config
илиWeb.config
. Спасибо stackoverflow.com!-
Не работает под .NET Core.
-
Пример использования:
У нас есть конфиг приложения
Web.config
. Настройки из этого файла читаются напрямую third-party библиотекой, повлиять на поведение которой мы не можем. В runtime также задать настройки мы не можем.Очевидным решением является задание настроек напрямую в
Web.config
, но это может оказаться довольно неудобно.Для упрощения модификации
Web.config
был реализован механизм синхронизации с настройками_ConfigSettings.xml
.Например, можно добавить такой блок настроек с комментарием:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory name="Default"> <!--{@=CONNECTION_STRING}--> <property name="connection.connection_string"></property> </session-factory> </hibernate-configuration>
Встроенный шаблонизатор подставит значение, заданное настройкой
CONNECTION_STRING
в файле_ConfigSettings.xml
. В результате будет создан файлWeb.live.config
из которого third-party библиотека будет читать все настройки:<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory name="Default"> <!--{@=CONNECTION_STRING}--> <property name="connection.connection_string">Server=localhost;Database=db;User ID=postgres;Password=password</property> </session-factory> </hibernate-configuration>
С полным перечнем возможностей шаблонизатора можно ознакомиться в тестах.
Для активации механизма подмены пути до
Web.config
приложения и шаблонизации настроек, необходимо при инициализации приложения (в методе Main) добавить вызов:AppConfig.Change();
-
Для версионирования используется SemVer.
В этом проекте используется лицензия MIT. Подробности в файле LICENSE.md