TGViewer
C# 1001 notes C# 1001 notes @csharp_1001_notes · 6.64K subscribers
Post #817 2.68K
🔥 Как правильно работать с конфигурацией в .NET

Самый чистый и масштабируемый способ получать настройки в .NET - это Options pattern.

Где живет конфигурация
Настройки приложения могут приходить из разных источников:
- переменные окружения
- JSON-файлы appsettings
- user secrets
- другие configuration providers

Да, можно читать значения напрямую через IConfiguration.
Но это плохо масштабируется:
- легко ошибиться в ключе
- нет типизации
- нет валидации
- код быстро превращается в хаос

Поэтому IConfiguration напрямую лучше не использовать в бизнес-коде.

Options pattern - как правильно
Вместо этого используется Options pattern:

1. Создаешь класс настроек
- один класс = одна логическая группа конфигурации

2. Биндишь его к appsettings.json
- через services.Configure<T>

3. Используешь настройки через DI
- IOptions
- IOptionsSnapshot
- IOptionsMonitor

Плюсы подхода
- строгая типизация
- автокомплит в IDE
- централизованная конфигурация
- проще рефакторить
- можно добавить валидацию через data annotations

Например:
- [Required]
- [Range]
- [EmailAddress]

Это позволяет ловить ошибки конфигурации при старте приложения, а не в продакшене.

Важно знать
Существуют разные интерфейсы:
- IOptions - статические настройки на все время жизни приложения
- IOptionsSnapshot - обновляются на каждый запрос (scoped)
- IOptionsMonitor - отслеживают изменения конфигурации в рантайме

Понимание разницы между ними сильно влияет на корректность архитектуры.

Если пишешь production .NET - Options pattern должен быть стандартом по умолчанию.

https://www.milanjovanovic.tech/blog/how-to-use-the-options-pattern-in-asp-net-core-7
More from @csharp_1001_notes
  1. Sep 20, 2026🧩 C# Channels: сообщение попало в очередь. Почему обработчик его не получил? Два воркера…
  2. Sep 16, 2026Эта задача проверяет понимание Memory<T>, pooling, ownership, IAsyncEnumerable, cancellati…
  3. Sep 16, 2026# C# 14: хитрая задача на ArrayPool, IAsyncEnumerable и время жизни памяти Есть поток данн…
  4. Sep 14, 2026# C# 14: конкурентный кеш без race condition Реализуйте потокобезопасный кеш: public seale…
  5. Sep 14, 2026🔍Тестовое собеседование с Senior C# разработчиком уже завтра 15 сентября(уже завтра!) в 1…
  6. Sep 11, 2026🔧 Как передать многострочный PEM через Aspire в ASP.NET Core Сертификаты и ключи в PEM со…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →