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