Что выведет на экран этот код?
Anonymous Quiz
13%
True, True
14%
True, False
15%
False, False
10%
False, True
36%
Возникнет ошибка времени выполнения
13%
🎯 Design pattern, который должен знать каждый — Decorator
Один из самых гибких и мощных паттернов — особенно в мире .NET и DI.
▪ Что это такое?
Decorator позволяет обернуть реализацию сервиса в дополнительное поведение — например, логгирование, кэширование или retry-механику — без изменения исходного кода.
▪ Как применить на практике?
В .NET это особенно удобно с библиотекой Scrutor — она расширяет встроенный DI-контейнер и позволяет добавлять декораторы в одну строчку.
Пример:
Зачем это нужно?
— логгировать вызовы без лома архитектуры
— централизованно обрабатывать ошибки
— добавить метрики без влезания в бизнес-логику
📌 Подробнее
Один из самых гибких и мощных паттернов — особенно в мире .NET и DI.
▪ Что это такое?
Decorator позволяет обернуть реализацию сервиса в дополнительное поведение — например, логгирование, кэширование или retry-механику — без изменения исходного кода.
▪ Как применить на практике?
В .NET это особенно удобно с библиотекой Scrutor — она расширяет встроенный DI-контейнер и позволяет добавлять декораторы в одну строчку.
Пример:
services.Decorate<IService, LoggingDecorator>();
Зачем это нужно?
— логгировать вызовы без лома архитектуры
— централизованно обрабатывать ошибки
— добавить метрики без влезания в бизнес-логику
📌 Подробнее
🚀 Хочешь масштабировать своё API по горизонтали? Без балансировщика нагрузки не обойтись.
Вот как быстро собрать свой на .NET с помощью YARP (Yet Another Reverse Proxy):
3 простых шага:
1. Установи библиотеку YARP (`Microsoft.ReverseProxy`)
2. Настрой YARP в
3. Укажи пути к downstream-сервисам
После этого твой прокси уже готов к работе — будет распределять трафик между сервисами.
Но это только начало. YARP мощный и расширяемый. Он поддерживает разные политики балансировки нагрузки прямо "из коробки":
▪
▪
▪
▪
▪
Автор статьи применил YARP для масштабирования нескольких приложений и делится опытом в полном гайде:
📖 Читай подробнее: https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing
Вот как быстро собрать свой на .NET с помощью YARP (Yet Another Reverse Proxy):
3 простых шага:
1. Установи библиотеку YARP (`Microsoft.ReverseProxy`)
2. Настрой YARP в
Program.cs
и appsettings.json
3. Укажи пути к downstream-сервисам
После этого твой прокси уже готов к работе — будет распределять трафик между сервисами.
Но это только начало. YARP мощный и расширяемый. Он поддерживает разные политики балансировки нагрузки прямо "из коробки":
▪
Random
— случайный выбор ▪
RoundRobin
— по кругу ▪
LeastRequests
— к тому, у кого меньше всего запросов ▪
FirstAlphabetical
— по алфавиту ▪
PowerOfTwoChoices
— выбери лучший из двух случайных (дефолт)Автор статьи применил YARP для масштабирования нескольких приложений и делится опытом в полном гайде:
📖 Читай подробнее: https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing
🧪 ABP Framework — мощный инструмент для .NET-разработчиков, который превращает стандартный ASP.NET Core в платформу для корпоративных решений. Это не просто фреймворк, а целая экосистема с готовыми модулями, шаблонами проектов и инструментами автоматизации.
Проект имеет поддержку DDD, мультитенантности и микросервисов из коробки. ABP берет на себя рутинные задачи вроде авторизации, валидации и логирования, позволяя сосредоточиться на бизнес-логике.
🤖 GitHub
@csharp_ci
Проект имеет поддержку DDD, мультитенантности и микросервисов из коробки. ABP берет на себя рутинные задачи вроде авторизации, валидации и логирования, позволяя сосредоточиться на бизнес-логике.
🤖 GitHub
@csharp_ci
😬 Почти каждый разработчик делал эту ошибку
Код вроде бы нормальный:
- API для регистрации вызывает
-
-
Но если присмотреться —
Почему это проблема?
❌
Если внутри
Исключение пролетит мимо и может тихо крашнуть приложение или вызвать странные баги.
Почему так?
🔸
🔸 Исключения из таких методов не перехватываются обычным образом
✅ Как правильно:
Всегда возвращай
📌 Запомни правило:
Ты уже сталкивался с этой ловушкой? Пиши свои фейлы или советы 👇
Код вроде бы нормальный:
- API для регистрации вызывает
UserService
-
UserService
сохраняет пользователя и вызывает EmailService
-
EmailService
отправляет письмо через SmtpClient
Но если присмотреться —
SendWelcomeEmail
помечен как **async void**
❗️Почему это проблема?
❌
async void
делает невозможным отлов исключений. Если внутри
SendEmailAsync()
что-то пойдёт не так — try/catch
не сработает. Исключение пролетит мимо и может тихо крашнуть приложение или вызвать странные баги.
Почему так?
🔸
async void
не возвращает Task, значит await
невозможен 🔸 Исключения из таких методов не перехватываются обычным образом
✅ Как правильно:
Всегда возвращай
Task
— только так можно надёжно обрабатывать ошибки.📌 Запомни правило:
async void
допустим только в event‑handler’ах. Больше — нигде.Ты уже сталкивался с этой ловушкой? Пиши свои фейлы или советы 👇
Что выведет на экран это код?
Anonymous Quiz
25%
IFoo.Do(int), IFoo.Do(int)
33%
Foo.Do(double), IFoo.Do(int)
12%
Foo.Do(double), Foo.Do(double)
9%
Foo.Do(double), IFoo.Do(double)
4%
IFoo.Do(double), IFoo.Do(double)
17%
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Devops: t.iss.one/DevOPSitsec
Базы данных: t.iss.one/sqlhub
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot -
📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Devops: t.iss.one/DevOPSitsec
Базы данных: t.iss.one/sqlhub
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 PolySharp — удобный способ использовать новые фичи C# на старых версиях .NET. Этот NuGet-пакет работает как source-генератор, автоматически подбирая нужные полифиллы в зависимости от целевой платформы. Для работы достаточно добавить ссылку на PolySharp, установить последнюю версию C# и можно писать современный код даже для .NET Framework или UWP.
Инструмент обладает умной генерацией только необходимых типов. Например, если компилятору C# 13 нужен
🤖 GitHub
@csharp_ci
Инструмент обладает умной генерацией только необходимых типов. Например, если компилятору C# 13 нужен
[IsExternalInit]
для init-only свойств, PolySharp создаст его за кулисами. При этом он не трогает фичи, требующие поддержки рантайма, но покрывает огромный пласт синтаксических улучшений — от nullable-аннотаций до интерполированных строковых обработчиков. 🤖 GitHub
@csharp_ci
🧠 Model Context Protocol (MCP) для новичков — от Microsoft
Microsoft выложила в open-source обучающий курс, чтобы помочь понять, как работает Model Context Protocol — протокол, лежащий в основе взаимодействия LLM с внешним контекстом.
📘 Что внутри:
— понятные объяснения концепций MCP
— практические примеры на .NET, Java, TypeScript, JavaScript и Python
— пошаговые упражнения для начинающих
Подойдёт тем, кто хочет разобраться, как строятся LLM-агенты, функции и контекстные вызовы в MCP-экосистеме.
👉 Репозиторий: https://github.com/microsoft/mcp-for-beginners
Microsoft выложила в open-source обучающий курс, чтобы помочь понять, как работает Model Context Protocol — протокол, лежащий в основе взаимодействия LLM с внешним контекстом.
📘 Что внутри:
— понятные объяснения концепций MCP
— практические примеры на .NET, Java, TypeScript, JavaScript и Python
— пошаговые упражнения для начинающих
Подойдёт тем, кто хочет разобраться, как строятся LLM-агенты, функции и контекстные вызовы в MCP-экосистеме.
👉 Репозиторий: https://github.com/microsoft/mcp-for-beginners
Рефлексия тормозит приложения? Пора управлять компилятором!
Устали писать одинаковый код снова и снова? Рефлексия съедает производительность в рантайме, а генерация boilerplate-кода отнимает часы. Современный C# предлагает элегантное решение — заставить компилятор работать на вас.
🎥 Вебинар «Заставьте компилятор работать на вас: магия метапрограммирования с Source Generators в C#»
📅 6 августа, 20:00
👩🏫 Елена Сычева
Разберём на практике:
→ Почему рефлексия — узкое место и как Source Generators решают проблему на этапе компиляции
→ Устройство компилятора Roslyn: синтаксические деревья и семантическая модель
→ Live-coding первого Source Generator для избавления от рутинного кода
→ Применение генераторов в популярных библиотеках .NET 7+
Результат: вы научитесь создавать собственные генераторы кода, которые автоматизируют рутину и повышают производительность приложений без runtime-накладных расходов.
Вебинар проходит в рамках курса «C# углубленный» — участники получают эксклюзивные условия обучения.
→ Регистрация: https://otus.pw/1j45/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
Устали писать одинаковый код снова и снова? Рефлексия съедает производительность в рантайме, а генерация boilerplate-кода отнимает часы. Современный C# предлагает элегантное решение — заставить компилятор работать на вас.
🎥 Вебинар «Заставьте компилятор работать на вас: магия метапрограммирования с Source Generators в C#»
📅 6 августа, 20:00
👩🏫 Елена Сычева
Разберём на практике:
→ Почему рефлексия — узкое место и как Source Generators решают проблему на этапе компиляции
→ Устройство компилятора Roslyn: синтаксические деревья и семантическая модель
→ Live-coding первого Source Generator для избавления от рутинного кода
→ Применение генераторов в популярных библиотеках .NET 7+
Результат: вы научитесь создавать собственные генераторы кода, которые автоматизируют рутину и повышают производительность приложений без runtime-накладных расходов.
Вебинар проходит в рамках курса «C# углубленный» — участники получают эксклюзивные условия обучения.
→ Регистрация: https://otus.pw/1j45/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
🔦 Fluent UI Blazor — библиотека компонентов от Microsoft, которая переносит фирменный Fluent Design в Blazor-приложения. Она включает готовые решения для кнопок, карточек, таблиц и сложных элементов вроде диалоговых окон, сохраняя единый стиль современных продуктов Microsoft.
Проект имеет глубокую интеграцию с .NET 8/9 и гибкость: темы настраиваются через CSS-переменные, есть поддержка RTL и адаптация под системные настройки. Для старта можно использовать готовые шаблоны
🤖 GitHub
@csharp_ci
Проект имеет глубокую интеграцию с .NET 8/9 и гибкость: темы настраиваются через CSS-переменные, есть поддержка RTL и адаптация под системные настройки. Для старта можно использовать готовые шаблоны
dotnet new
или вручную подключить NuGet-пакеты. 🤖 GitHub
@csharp_ci
Что выведет на экран этот код?
Anonymous Quiz
24%
Foo { Value = 3, IsEven = True }
51%
Foo { Value = 3, IsEven = False }
6%
Foo { Value = 2, IsEven = False }
5%
Foo { Value = 2, IsEven = True }
13%
🧪 Puppeteer Sharp — .NET-порт популярной библиотеки Puppeteer для автоматизации браузера Chrome через DevTools Protocol. Позволяет скриптовать действия в браузере: делать скриншоты, генерировать PDF, парсить динамический контент и тестировать веб-приложения.
Проект поддерживает .NET Standard 2.0+ и .NET 8, включая AOT-компиляцию. Интеграция с C# делает его удобным альтернативным Node.js-версии, например, для E2E-тестов в ASP.NET или массовой генерации документов.
🤖 GitHub
@csharp_ci
Проект поддерживает .NET Standard 2.0+ и .NET 8, включая AOT-компиляцию. Интеграция с C# делает его удобным альтернативным Node.js-версии, например, для E2E-тестов в ASP.NET или массовой генерации документов.
🤖 GitHub
@csharp_ci
🔥 В C# 14 (.NET 10 preview) появляется новое ключевое слово — field
Больше не нужно вручную создавать приватные поля для автосвойств.
Теперь можно обращаться к автоматически создаваемому полю через field прямо внутри get, set или init.
🧩 Пример:
✅ Работает во всех аксессорах
✅ Меньше кода — больше читаемости
✅ Особенно удобно при валидации, логировании, модификации значений
⚠️ Если у тебя уже есть переменная с именем field, будут конфликты. Решения:
- использовать field
- или this.field
- или переименовать существующее поле
Больше не нужно вручную создавать приватные поля для автосвойств.
Теперь можно обращаться к автоматически создаваемому полю через field прямо внутри get, set или init.
🧩 Пример:
string Name
{
get => field;
set => field = value.Trim();
}
✅ Работает во всех аксессорах
✅ Меньше кода — больше читаемости
✅ Особенно удобно при валидации, логировании, модификации значений
⚠️ Если у тебя уже есть переменная с именем field, будут конфликты. Решения:
- использовать field
- или this.field
- или переименовать существующее поле
Хотите разобраться в тестировании API на ASP.NET Core?
➡️ Присоединяйтесь к открытому уроку «Тестирование API в ASP.NET Core: Интеграция и Нагрузка» 5 августа в 20:00 МСК. На вебинаре мы:
- Разберем ключевые концепции интеграционного и нагрузочного тестирования.
- Научимся писать интеграционные тесты с популярными библиотеками.
- Освоим инструменты для нагрузочного тестирования и анализа результатов.
📗 Этот урок — отличная подготовка к курсу «C# ASP.NET Core разработчик», который стартует совсем скоро. Все участники вебинара получат скидку на обучение!
Записаться на вебинар → https://otus.pw/ZkFR/?erid=2W5zFHq4zj2
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
➡️ Присоединяйтесь к открытому уроку «Тестирование API в ASP.NET Core: Интеграция и Нагрузка» 5 августа в 20:00 МСК. На вебинаре мы:
- Разберем ключевые концепции интеграционного и нагрузочного тестирования.
- Научимся писать интеграционные тесты с популярными библиотеками.
- Освоим инструменты для нагрузочного тестирования и анализа результатов.
📗 Этот урок — отличная подготовка к курсу «C# ASP.NET Core разработчик», который стартует совсем скоро. Все участники вебинара получат скидку на обучение!
Записаться на вебинар → https://otus.pw/ZkFR/?erid=2W5zFHq4zj2
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🖍️ MudBlazor — Material Design для Blazor-приложений. Библиотека компонентов для создания современных веб-интерфейсов на C# с минимальным использованием JavaScript. Включает все основные Material-элементы: кнопки, таблицы, диалоги и сложные компоновки.
Инструмент имеет глубокую интеграция с Blazor WASM и Server, включая темы, анимации и адаптивную верстку. Не требует сторонних зависимостей, что упрощает развертывание.
🤖 GitHub
@csharp_ci
Инструмент имеет глубокую интеграция с Blazor WASM и Server, включая темы, анимации и адаптивную верстку. Не требует сторонних зависимостей, что упрощает развертывание.
🤖 GitHub
@csharp_ci