C# 1001 notes
Kanalga Telegram’da o‘tish
Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp
Ko'proq ko'rsatish6 538
Obunachilar
-224 soatlar
-57 kunlar
-330 kunlar
Postlar arxiv
6 537
System.IO.Hashing - это действительно полезный пакет
NuGet для некриптографического хэширования в .NET.
📌Узнать о нем подробнее6 537
6 537
Стоит ли становиться Rust-разработчиком в 2024 и как это сделать?
💻Узнайте на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом:
- обсудите основные направления развития языка и его инфраструктуры;
- рассмотрите наиболее востребованные навыки по этим направлениям;
- разберёте типичное собеседование на должность Rust-разработчика в различных областях.
Встречаемся 26 февраля в 20:00 мск в рамках курса «Rust Developer. Professional». Доступна рассрочка на обучение!
👉Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://tglink.io/4c0293ce6c0c?erid=LjN8KWx1q
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
6 537
EF 8 генерирует бодее эффективные запросы, используя
IN вместо EXISTS, когда метод Contains используется с подзапросом.
Разницу в запросах вы можете увидеть в примере на картинке.
@csharp_1001_notes6 537
🖥 Паттерн Хранитель (Memento) - поведенческий шаблон проектирования, позволяющий, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояние объекта так, чтобы позднее восстановить его в это состояние.
Шаблон Хранитель используется, когда:
▪необходимо сохранить снимок состояния объекта (или его части) для последующего восстановления
▪прямой интерфейс получения состояния объекта раскрывает детали реализации и нарушает инкапсуляцию объекта
В C# паттерн Memento может быть реализован с помощью комбинации трех классов:
Originator, Memento и Caretaker.
▪ Подробнее
@csharp_1001_notes6 537
Учитесь тому, что пригодится в работе и в жизни — бесплатно, с Яндекс Практикумом.
Тут на одной странице собраны курсы, которые помогут попробовать себя в разных IT-профессиях и получить практический навык. 17 разных курсов по программированию, аналитике данных, маркетингу, менеджменту и дизайну. Прохождение занимает от 2 до 20 часов.
Например, можно разобраться в основах Java, научиться искать и нанимать тестировщиков, задизайнить плакат для фестиваля еды и ещё много чего.
Выбирайте курс по душе и пробуйте себя в разных профессиях!
6 537
🖥 Устойчивость приложений и хаос-инженерия
Эта статья знакомит с концепцией отказоустойчивости и хаос-инженерии в приложениях .NET с использованием библиотеки Polly и рассказывает о новых возможностях, позволяющих использовать хаос-инженерию.
В ней приведено практическое руководство по интеграции стратегий хаоса в HTTP-клиенты и показывается, как настраивать конвейеры отказоустойчивости для повышения эффективности работы вашего приложения.
▪Статья
▪Polly
@csharp_1001_notes
6 537
Учитесь тому, что пригодится в работе и в жизни — бесплатно, с Яндекс Практикумом.
Тут на одной странице собраны курсы, которые помогут попробовать себя в разных IT-профессиях и получить практический навык. 17 разных курсов по программированию, аналитике данных, маркетингу, менеджменту и дизайну. Прохождение занимает от 2 до 20 часов.
Например, можно разобраться в основах Java, научиться искать и нанимать тестировщиков, задизайнить плакат для фестиваля еды и ещё много чего.
Выбирайте курс по душе и пробуйте себя в разных профессиях!
6 537
🔥 Как написать свой API: OData на С# за пару часов?
Покажет Эдгар Пилипсон – ведущий инженер в Nexign.
Приходите на бесплатный практический урок от OTUS!
Вебинар будет особенно полезен разработчикам, которые хотят использовать гибкий API для работы с данными.
Встречаемся 13 февраля в 20:00 мск в рамках курса «C# ASP. NET Core разработчик».
Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись.
Пройти тест.
6 537
🖥 Перехватчики в EF Core
Перехватчики в EF Core помогают перехватывать, изменять или подавлять операции EF Core.
Перехватчики регистрируются для каждого экземпляра DbContext при настройке контекста. Каждый перехватчик реализует интерфейс IInterceptor. Несколько распространённых производных интерфейсов включают
- IDbCommandInterceptor,
- IDbConnectionInterceptor,
- IDbTransactionInterceptor,
- ISaveChangesInterceptor.
Вам не нкжно реализовывать эти интерфейсы напрямую.
Лучше использовать конкретные реализации и переопределить необходимые методы.
Вот вариант использования перехватчиков с помощью самого распространённого перехватчика SaveChangesInterceptor, который добавляет поведение при сохранении изменений в базе данных.
Добавление записей аудита
Записи аудита изменений сущностей - ценная функция в некоторых приложениях. Вы записываете дополнительную информацию аудита каждый раз, когда объект создаётся или изменяется. Также это могут быть значения «до» и «после», в зависимости от ваших требований.
Например, создадим интерфейс IAuditable с датами создания и изменения объекта:
public interface IAuditable
{
DateTime Created { get; }
DateTime? Modified { get; }
}
Добавим UpdateInterceptor для записи значений аудита. Он использует ChangeTracker для поиска всех экземпляров IAuditable и устанавливает соответствующее значение свойства. Здесь мы используем метод SavingChangesAsync, который запускается до того, как изменения будут сохранены в БД.
internal sealed class UpdateInterceptor
: SaveChangesInterceptor
{
public override
ValueTask<InterceptionResult<int>>
SavingChangesAsync(
DbContextEventData e,
InterceptionResult<int> result,
CancellationToken ct = default)
{
if (e.Context is not null)
UpdateEntities(e.Context);
return base
.SavingChangesAsync(e, result, ct);
}
private static void
UpdateEntities(DbContext ctx)
{
var now = DateTime.UtcNow;
var entities = ctx
.ChangeTracker
.Entries<IAuditable>()
.ToList();
foreach (var e in entities)
{
if (e.State == EntityState.Added)
e.Property(
nameof(IAuditable.Created)) = now;
if (e.State == EntityState.Modified)
e.Property(
nameof(IAuditable.Modified)) = now;
}
}
}Эту реализацию можно легко расширить, включив в неё, например, информацию о текущем пользователе.
Зарегистрировать перехватчик можно следующим образом:
services.AddSingleton<UpdateInterceptor>();
services.AddDbContext<
IApplicationDbContext,
AppDbContext>(
(sp, opts) => opts
.UseSqlServer(connString)
.AddInterceptors(
sp.GetRequiredService<UpdateInterceptor>());
👉 Подробнее
@csharp_1001_notes6 537
Это приглашение на One Day Offer для C#-разработчиков от Ozon Tech.
Ребята расширяют направление Логистики и готовы сделать оффер в два шага.
Хочешь писать высоконагрузочный код и реализовывать сценарии бизнес-логики лидирующего e-com в России? Оставляй заявку: https://s.ozon.ru/o38dQ26
Будет короткий технический скрининг и финальное собеседование 17 февраля.
Бонус для кандидатов: встреча-знакомство с тимлидами — можно увидеть все команды и выбрать свою! Всё это онлайн. А ещё ждёт мерч. Подробности тут
6 537
🖥 Где изучать C# в 2024. Бесплатные курсы и полезные ресурсы
▪Читать
@csharp_1001_notes
6 537
CI/CD Workflow: упрощенный гайд от ByteByteGo (Alex Xu)
CI/CD — это методология, которая позволяет автоматизировать процесс разработки и доставки ПО в продакшн.
Будь вы разработчиком, специалистом по DevOps, тестировщиком или занимаетесь любой современной ролью в ИТ, CI/CD пайплайны стали неотъемлемой частью процесса разработки.
#инфографика
6 537
🖥Различные методы размещения и развертывания Blazor WebAssembly
В области веб-разработки Blazor WebAssembly является революционным решением.
Он позволяет разработчикам создавать интерактивные веб-приложения на стороне клиента, используя
.NET и C#, а не JavaScript.
Это не только открывает новые возможности для веб-разработки, но и приводит к появлению новых методов размещения и развертывания этих приложений.
https://www.thetechplatform.com/post/different-methods-to-host-and-deploy-blazor-webassembly
@csharp_1001_notes6 537
🖥 SOAPHound - это инструмент для сбора данных
.NET, который собирает данные Active Directory по протоколу Active Directory Web Services (ADWS).
SOAPHound является альтернативой ряду инструментов безопасности с открытым исходным кодом, которые обычно используются для извлечения данных Active Directory через протокол LDAP.
SOAPHound способен извлекать ту же информацию без прямого взаимодействия с сервером LDAP.
Вместо этого LDAP-запросы оборачиваются в серию SOAP-сообщений, которые отправляются на сервер ADWS с помощью канала связи NET TCP Binding.
Затем сервер ADWS разворачивает LDAP-запросы и направляет их на LDAP-сервер, работающий на том же контроллере домена.
В результате LDAP-трафик не может быть обнаружен обычными средствами мониторинга.
• Github
@csharp_1001_notes6 537
С чего начать изучение работы с RabbitMQ?
С бесплатного практического урока «Очереди сообщений и протокол AMQP» от OTUS.
На вебинаре разберём:
- возможности протокола AMQP;
- как подключаться к брокеру из вашего языка программирования;
- как отправить и принять сообщение;
- как организовать простейший RPC-сервис.
Встречаемся 6 февраля в 20:00 мск в рамках курса «RabbitMQ для разработчиков и администраторов». Доступна рассрочка на обучение!
Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок: https://otus.pw/Cs31/?erid=LjN8KVxQX
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 537
Простой способ для генерации классов C# из данных JSON/XML! 🤖🔥
В Visual Studio:
1/ Скопируйте содержимое
JSON/XML.
2/ В Visual Studio нажмите на Edit -> Paste Special -> Paste JSON as classes (или XML).
3/ Вот и все!
@csharp_1001_notes6 537
🖥Делегирующие обработчики - это как промежуточное программное обеспечение (middleware) http://ASP.NET Core.
C помощью делегирующих обработчиков можно решить множество проблем:
- Протоколирование
- Трассировка
- Валидация
- Аутентификация
- Авторизация
https://dotnet.microsoft.com/en-us/apps/aspnet
@csharp_1001_notes
6 537
Как эффективно обрабатывать данные в высоконагруженных проектах?
Расскажет опытный эксперт на бесплатном практическом уроке «Асинхронная обработка данных и ее использование в высоконагруженных проектах» от OTUS.
На вебинаре разберём:
- применение асинхронной обработки;
- архитектуру прототипа;
- узкие места прототипа.
📅 Занятие пройдёт 15 февраля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
🌐 Для бесплатного участия регистрируйтесь прямо сейчас: https://otus.pw/2sRP/?erid=LjN8K3dTm
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 537
🖥 Microsoft Office’s RTC (Real-Time Channel) migration to modern .NET
Блог о переходе Microsoft Office с RTC (Real-Time Channel) на современный .
NET!
Это было одно из самых первых применений SignalR в компании!
#dotnet #aspnetcore #signalr
https://devblogs.microsoft.com/dotnet/office-rtc-dotnet-migration/
@csharp_1001_notes
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
