Я хочу получить некоторые мысли о лучших практиках, связанных с тем, что среда .NET-конфигурации приложения нейтральна.Выполнение .NET-конфигурации с нейтральной средой
Фон. Некоторые фон в первую очередь. Я пришел из мира Java, а не из .NET-мира, и в Java есть определенные вещи, которые мы можем сделать для создания пакетов, нейтральных по отношению к окружающей среде. Они, как правило, основаны на абстрагировании конфигурации в некотором роде. Вот несколько примеров:
- JNDI позволяет приложениям ссылаться на ресурсы предприятия (например, базы данных, JavaMail сессии, JCR репозитории и т.д.) по имени, а затем имя отображаются в конкретную конфигурацию в соответствии с условиями (dev, test, prod).
- Другим примером могут быть файлы свойств. У вас может быть множество свойств (например, «encryption_key», «smtp.server.url», «admin.email» и т. Д.), Которые приложение захватывает из файла свойств в известном месте при запуске приложения. Ключи свойств отображаются на разные значения, в зависимости от среды.
- Некоторые рамки разработки приложений (например, Spring) знают, как извлекать файлы свойств, чтобы свойства могли быть интегрированы с каркасной конфигурацией.
Другой подход, который я видел в Java, - это подход, основанный на построении времени, в котором вы используете Ant (подстановка токенов) или Maven (профили сборки) для создания пакетов, специфичных для конкретной среды. Мне совсем не нравится этот подход, потому что я предпочитаю развернуть точно такой же пакет для тестирования и разработки. Но это подход, который я видел.
желаемое решение. Я предполагаю, что в .NET есть несколько сопоставимых стратегий для развязки конфигурации (а также с добавлением содержащего пакета) из ее среды.
В идеале я бы хотел получить решение, которое позволит мне поддерживать не относящую к окружающей среде конфигурацию, тесно связанную с приложением, экстернализируя только окружающую среду. Чтобы вернуться к примерам Java, много раз «конфигурация» действительно является чем-то, что контролирует разработчик, например, включать фильтр сервлетов Sitemesh для оформления страниц, вложение зависимостей или проводку приложений, сопоставление такого-то метода MVC-контроллера на URI запроса и т. д. Это то, что я не хочу быть экстернализированным. Но ключи шифрования, строки подключения БД, уровни журналов и т. Д., Да.