#полезное
👍 OmniSharp — интеллектуальная подсказка для C# без Visual Studio. Этот движок на базе Roslyn превращает любой редактор кода в полноценную C#-IDE. В отличие от монолитных решений, он работает как отдельный сервер, предоставляя автодополнение, навигацию по коду и анализ проектов даже в минималистичных средах разработки.
Проект запускается под .NET 6 на Windows и через Mono на Linux/macOS. Интеграция с редакторами занимает буквально пару строк конфига, а сборки из мастер-ветки доступны сразу после каждого коммита.
Гитхаб
👉 Новости 👉 База вопросов
Проект запускается под .NET 6 на Windows и через Mono на Linux/macOS. Интеграция с редакторами занимает буквально пару строк конфига, а сборки из мастер-ветки доступны сразу после каждого коммита.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄1
#полезное
👋 Squidex — автономный CMS с открытым исходным кодом. Этот проект переосмысливает традиционный подход к системам управления контентом, предлагая вместо готового интерфейса мощный API с поддержкой OData-фильтров и Swagger-спецификаций. Разработчики могут использовать Squidex как основу для сайтов, мобильных приложений или серверных решений, сохраняя полный контроль над фронтендом.
Система построена на ASP.NET Core с архитектурой CQRS и работает как на Windows, так и на Linux. В отличие от аналогов, Squidex не навязывает конкретную клиентскую часть — вы сами решаете, как визуализировать контент.
Гитхаб
👉 Новости 👉 База вопросов
Система построена на ASP.NET Core с архитектурой CQRS и работает как на Windows, так и на Linux. В отличие от аналогов, Squidex не навязывает конкретную клиентскую часть — вы сами решаете, как визуализировать контент.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Для чего используется класс StringBuilder и как он оптимизирует работу со строками?
👉 Новости 👉 База вопросов
StringBuilder предназначен для сборки строк путём последовательного добавления, чтобы не создавать новые объекты string при каждой конкатенации. Он хранит изменяемый буфер символов и расширяет его по необходимости, что значительно уменьшает число аллокаций и повышает производительность при большом числе операций.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
#полезное
🥄 GitHub Copilot Chat теперь с открытым кодом
Microsoft сделали первый шаг к превращению VS Code в полноценный опенсорс AI-редактор
Теперь можно заглянуть под капот: как работает agent mode, что уходит в LLM, как устроены промпты и даже какую телеметрию они собирают
Код доступен на GitHub
👉 Новости 👉 База вопросов
Microsoft сделали первый шаг к превращению VS Code в полноценный опенсорс AI-редактор
Теперь можно заглянуть под капот: как работает agent mode, что уходит в LLM, как устроены промпты и даже какую телеметрию они собирают
Код доступен на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😴 C#‑«скрипт» для отправки HTTP-запроса с использованием Flurl.
Эта возможность появится в .NET 10 — подробнее
👉 Новости 👉 База вопросов
Эта возможность появится в .NET 10 — подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😴 Как быстро расчистить раздутые API-контроллеры:
Используй метод-инъекцию э
Это малоизвестная фича в
Для этого используется
Хотя
Когда стоит использовать метод-инъекцию:
🟠 когда сервис используется только в одном экшене
🟠 когда конструктор начинает превращаться в кашу из зависимостей
🟠 когда сервис тяжёлый, и важно контролировать его создание и утилизацию
Да, внедрение через конструктор — это дефолтный подход.
Но метод-инъекция — это удобный инструмент, если ты:
- хочешь придерживаться Single Responsibility Principle
- не хочешь превращать контроллер в свалку зависимостей
👉 Новости 👉 База вопросов
Используй метод-инъекцию э
Это малоизвестная фича в
ASP.NET Core, которая позволяет внедрять зависимости не в конструктор, а напрямую в метод-обработчик.Для этого используется
[FromServices] IYourServiceХотя
[FromServices] можно и опустить — оно не обязательно.Когда стоит использовать метод-инъекцию:
Да, внедрение через конструктор — это дефолтный подход.
Но метод-инъекция — это удобный инструмент, если ты:
- хочешь придерживаться Single Responsibility Principle
- не хочешь превращать контроллер в свалку зависимостей
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Как устроена строка в С# — ссылочный тип или значимый, и зачем нужен string pool (интернирование)?
👉 Новости 👉 База вопросов
string в С# - ссылочный тип с неизменяемым содержимым. CLR использует intern pool - таблицу статически созданных литералов и интернированных строк, чтобы хранить одну копию одинаковых значений. Это экономит память и ускоряет сравнение через ссылочное равенство для литералов.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 C# наконец-то получает дискриминируемые объединения
Ну, возможно?
Появилось новое предложение по добавлению объединений типов (Type Unions) в C#. И это действительно важно.
Почему?
Это открывает нативную поддержку таких конструкций, как
Больше не нужно городить костыли, оборачивать значения или зависеть от сторонних библиотек, чтобы описать функцию, возвращающую успех или ошибку.
Теперь это может измениться.
В предложении описываются нативные union-типы, включая поддержку pattern matching, проверку исчерпывающего перебора (exhaustiveness checks) и другие фичи.
Не хочешь ждать?
Вот как можно реализовать паттерн
Если предпочитаешь бросать исключения — можешь это пропустить.
👉 Новости 👉 База вопросов
Ну, возможно?
Появилось новое предложение по добавлению объединений типов (Type Unions) в C#. И это действительно важно.
Почему?
Это открывает нативную поддержку таких конструкций, как
Result и Option.Больше не нужно городить костыли, оборачивать значения или зависеть от сторонних библиотек, чтобы описать функцию, возвращающую успех или ошибку.
Я уже много лет выступаю за использование паттерна Result. Но до сих пор отсутствие поддержки на уровне языка делало его применение неуклюжим.
Теперь это может измениться.
В предложении описываются нативные union-типы, включая поддержку pattern matching, проверку исчерпывающего перебора (exhaustiveness checks) и другие фичи.
Не хочешь ждать?
Вот как можно реализовать паттерн
Result уже сегодняЕсли предпочитаешь бросать исключения — можешь это пропустить.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😊 Работать с HTTP-заголовками это сложно?
Короткий ответ: нет. И вот почему
Если ты взаимодействуешь с HTTP-клиентами и запросами, тебе неизбежно придётся работать с заголовками.
Это дополнительные данные, передаваемые вместе с запросом или ответом, которые содержат метаинформацию о сообщении.
Заголовки делятся на 4 группы по контексту:
🟠 Request headers (заголовки запроса)
🟠 Response headers (заголовки ответа)
🟠 Representation headers (информация о формате представления)
🟠 Payload headers (сведения о теле запроса/ответа)
В большинстве случаев ты будешь работать именно с заголовками запроса и ответа.
Добавить заголовки в HTTP-запрос можно двумя способами:
🟠 Добавить ко всем запросам
🟠 Добавить только к конкретному запросу
Если нужно извлечь значение из заголовка , это тоже делается просто.
Оба сценария реализуются достаточно прямолинейно.
HTTP-заголовки повсеместны в современных веб-приложениях, поэтому важно придерживаться лучших практик:
🟠 Использовать лаконичные и понятные заголовки
🟠 Настраивать кэширование через заголовки (
🟠 Учитывать CORS (
🟠 Обеспечивать безопасность уже на уровне заголовков
👉 Новости 👉 База вопросов
Короткий ответ: нет. И вот почему
Если ты взаимодействуешь с HTTP-клиентами и запросами, тебе неизбежно придётся работать с заголовками.
Это дополнительные данные, передаваемые вместе с запросом или ответом, которые содержат метаинформацию о сообщении.
Заголовки делятся на 4 группы по контексту:
В большинстве случаев ты будешь работать именно с заголовками запроса и ответа.
Добавить заголовки в HTTP-запрос можно двумя способами:
Если нужно извлечь значение из заголовка , это тоже делается просто.
Оба сценария реализуются достаточно прямолинейно.
HTTP-заголовки повсеместны в современных веб-приложениях, поэтому важно придерживаться лучших практик:
Cache-Control, ETag)Access-Control-Allow-Origin)(Strict-Transport-Security, Content-Security-Policy и др.)Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Чем отличаются lEnumerable и IQueryable? Где применяется отложенное выполнение запросов?
👉 Новости 👉 База вопросов
IEnumerable<T> выполняет перебор элементов в памяти (in-memory) и поддерживает отложенное выполнение только LINQ-to-Objects. IQueryable‹T› расширяет IEnumerable‹T> и позволяет строить выражения, которые переводятся в запрос на удалённый источник (БД), выполняя отложенное (deferred) выполнение на стороне сервера при первом переборе.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
❤️🔥 EF Core медленный.
ТАКЖЕ ОНИ -> Используют EF Core, чтобы вернуть:
> 25 полей из таблицы,
> 1 000 000 строк за раз,
> включая данные из всех связанных таблиц.
Лучшая оптимизация производительности — это научиться правильно пользоваться инструментами
👉 Новости 👉 База вопросов
ТАКЖЕ ОНИ -> Используют EF Core, чтобы вернуть:
> 25 полей из таблицы,
> 1 000 000 строк за раз,
> включая данные из всех связанных таблиц.
Лучшая оптимизация производительности — это научиться правильно пользоваться инструментами
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👨💻 Изменение стандартного представления класса в режиме отладки
К сведению: мы можем изменить стандартное отображение класса в отладчике C# с помощью атрибута
👉 Новости 👉 База вопросов
К сведению: мы можем изменить стандартное отображение класса в отладчике C# с помощью атрибута
DebuggerDisplayPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес #CSharp
🤔 Что такое record в С#? Какие преимущества они дают?
👉 Новости 👉 База вопросов
record - это тип-спецификация С # для создания неизменяемых (immutable) ссылочных объектов с автоматически сгенерированными методами Equals, GetHashCode И Tostring . Они поддерживают «неугасающие» (with ) копии с изменением части свойств. Это упрощает работу с DTO и моделями, где важно сравнение по значению и безопасное клонирование.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 Зачем нужны health checks и мониторинг?
Если в приложении что-то ломается - ты должен узнать об этом сразу.
Health checks сокращают цикл обратной связи:
ты получаешь уведомление в ту же секунду, как только что-то пошло не так.
Health checks в
🔵 Реализуешь
🔵 Кастомные проверки пишутся просто
🔵 Есть готовые проверки из коробки
🔵 Гибко настраиваемый формат ответа
🔵 Можно интегрировать с любым инструментом мониторинга или алертинга
Вот как начать использовать Health Checks: тут
👉 Новости 👉 База вопросов
Если в приложении что-то ломается - ты должен узнать об этом сразу.
Health checks сокращают цикл обратной связи:
ты получаешь уведомление в ту же секунду, как только что-то пошло не так.
Health checks в
ASP.NET Core:IHealthCheckВот как начать использовать Health Checks: тут
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 Как EF Core стал ближе к Dapper?
Всё благодаря одной фиче:
Сырые SQL-запросы к неотражённым типам (unmapped types).
Теперь ваши запросы могут возвращать любые типы, которые можно сопоставить, не добавляя их в EF-модель.
Рекомендуемый способ использования это метод
Ключевые особенности этой фичи:
> Поддержка представлений , хранимых процедур и функций
> Комбинирование SQL и LINQ в одном запросе
> Защита от SQL-инъекций
👉 Новости 👉 База вопросов
Всё благодаря одной фиче:
Сырые SQL-запросы к неотражённым типам (unmapped types).
Теперь ваши запросы могут возвращать любые типы, которые можно сопоставить, не добавляя их в EF-модель.
Рекомендуемый способ использования это метод
SqlQuery<T> для параметризованных запросов.Ключевые особенности этой фичи:
> Поддержка представлений , хранимых процедур и функций
> Комбинирование SQL и LINQ в одном запросе
> Защита от SQL-инъекций
В одном из проектов мы внедрили 3 таких запроса в прод, и сразу заметили, что код стал чище и легче в поддержке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😱 Забирай мой подход к упрощению управления потоками:
(в .NET 9)
Вместо использования классического
Вместе с ним добавлен метод
Этот тип даёт более удобную и безопасную синхронизацию потоков за счёт нового API.
Оператор
В этом случае он использует новый API, а не старый Monitor.
Пример кода выше.
👉 Новости 👉 База вопросов
(в .NET 9)
Вместо использования классического
System.Threading.Monitor, в .NET 9 появился новый тип — System.Threading.Lock.Вместе с ним добавлен метод
Lock.EnterScope(), который создаёт эксклюзивную область и автоматически освобождает блокировку в конце блока кода.Этот тип даёт более удобную и безопасную синхронизацию потоков за счёт нового API.
Оператор
lock в C# теперь сам распознаёт, если ты передаёшь объект типа Lock.В этом случае он использует новый API, а не старый Monitor.
Пример кода выше.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 Как вы делили микросервисы по доменным областям?
Сервисы группируют по аккуратным bounded context: пользователи, заказы, инвентарь, биллинг. Каждая область отвечает за свой контекст данных и бизнес-логику, хранит собственную БД. Это упрощает понимание, тестирование и развитие отдельных частей системы. При необходимости добавляют сервисы-агрегаторы для оркестрации.
👉 Новости 👉 База вопросов
Сервисы группируют по аккуратным bounded context: пользователи, заказы, инвентарь, биллинг. Каждая область отвечает за свой контекст данных и бизнес-логику, хранит собственную БД. Это упрощает понимание, тестирование и развитие отдельных частей системы. При необходимости добавляют сервисы-агрегаторы для оркестрации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😘 Как сделать ужасный API-дизайн:
- Возвращай
А как лучше?
Используй Problem Details для обработки ошибок в API.
Хотя бы договоритесь в команде о едином формате ответов при ошибках.
Я видел API, которые возвращают
Problem Details — это стандарт для описания ошибок в HTTP-ответах.
Обычных HTTP-статусов недостаточно, чтобы передать полезную информацию об ошибке.
Реализовать Problem Details в .NET — на самом деле просто.
Вот гайд: читать
👉 Новости 👉 База вопросов
- Возвращай
200 OK с телом {"success": false}А как лучше?
Используй Problem Details для обработки ошибок в API.
Хотя бы договоритесь в команде о едином формате ответов при ошибках.
Я видел API, которые возвращают
200 OK даже при ошибке в теле (да, это в сторону GraphQL-разработчиков).Problem Details — это стандарт для описания ошибок в HTTP-ответах.
Обычных HTTP-статусов недостаточно, чтобы передать полезную информацию об ошибке.
Реализовать Problem Details в .NET — на самом деле просто.
Вот гайд: читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Properties в ASP.NET Core — недооценённый, но важный механизм
Если вы используете куки или OpenID Connect в ASP.NET Core, то наверняка сталкивались с объектом
AuthenticationProperties. Он не просто "дополнительные параметры" — это мощный инструмент управления поведением аутентификации.Что можно сделать с AuthenticationProperties:
• Установить срок действия куки:
new AuthenticationProperties { ExpiresUtc = DateTimeOffset.UtcNow.AddHours(1) }
• Указать URL возврата после логина:
new AuthenticationProperties { RedirectUri = "/dashboard" }
• Добавить временные метки, элементы состояния, флаги:
Например, IsPersistent, IssuedUtc, AllowRefresh, и кастомные значения.
• Используется в:
HttpContext.SignInAsync(...)
ChallengeAsync(...) для OIDC
редиректах после логина/логаута
Это ключевой объект, если вы хотите более гибко управлять логикой входа, выхода и жизненным циклом сессии в ASP.NET Core.
Полный разбор:
https://blog.duendesoftware.com/posts/20250527-the-role-of-authenticationproperties-in-aspnet-core
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 В чём преимущества микросервисной архитектуры перед МОНОЛИТОМ?
Микросервисы позволяют развивать, развёртывать и масштабировать каждую бизнес-функцию независимо, снижая время выхода фичи. Они повышают устойчивость: сбой одного сервиса не останавливает всю систему. Также каждая команда может выбирать оптимальный стек технологий. Но требуют сложной инфраструктуры для оркестрации и мониторинга.
👉 Новости 👉 База вопросов
Микросервисы позволяют развивать, развёртывать и масштабировать каждую бизнес-функцию независимо, снижая время выхода фичи. Они повышают устойчивость: сбой одного сервиса не останавливает всю систему. Также каждая команда может выбирать оптимальный стек технологий. Но требуют сложной инфраструктуры для оркестрации и мониторинга.
Please open Telegram to view this post
VIEW IN TELEGRAM