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