В течение последних нескольких лет я работал с Sitecore CMS и теперь вернулся к «чистой» разработке ASP.Net MVC. Мне очень нравится, как Sitecore CMS работает с конфигурационными файлами
Тут все логические части конфигурации вынесены в отдельные (небольшие) конфигурационные файлы, все файлы объединяются при запуске приложения, патчи применяют при прикреплении файлов. На мой вкус это чистое и понятное решение.
Возвращаясь к чистому ядру ASP.Net MVC — вы можете добавлять файлы в конфигурацию один за другим. Все остальные будут объединены в окончательный конфиг. И это выглядит нормально, пока вы не разработаете приложение с широкими возможностями настройки (например, CMS) и не получите сотни конфигурационных файлов.
Существует 3 типа файлов конфигурации, которые вы можете добавить в ASP.Net Core «из коробки»: .json, .xml и
Давайте создадим методы расширения для IConfigurationBuilder, которые позволяют включать несколько файлов конфигурации этих типов одной строкой кода в Program.cs..ini
.
Основная идея заключается в том, чтобы получить список необходимых файлов (выполнив поиск в каталоге) и добавить их все в IConfigurationBuilder, используя необходимые стандартные методы в цикле.
Логика будет примерно одинаковой для каждого расширения, единственная разница заключается в методе, вызываемом компоновщиком.
- Начнем с создания общедоступного статического класса ConfigurationExtensions (естественно, подойдет любое имя). Класс можно создать в любом проекте вашего решения. В случае, если это не тип проекта ASP.Net Core, вам может потребоваться установить дополнительные пакеты nuget для общедоступных методов, таких как Microsoft.Extensions.Configuration.Json и т. д.
- Повторно используем метод GetAvailableFiles().
- Добавляем делегата для переноса «однофайловых» методов IConfigurationBuilder ( AddConfigFileDelegate )
4. Подключаем общую логику добавления файлов в IConfigurationBuilder ( метод AddConfigFiles() )
5. Добавляем общедоступные методы для расширения функциональности IConfigurationBuilder — AddJsonFiles, AddXmlFiles и AddIniFiles.filenamePattern по умолчанию
Это позволяет нам использовать расширение следующим образом:
Все файлы будут добавлены в алфавитном порядке. Вам также разрешено фильтровать файлы в каталогах не только по расширению.
Полный исходный код представлен ниже: