Загрузка...

Пишем с нуля Dependency Injection на C#/.NET | От "Hello World" до Autofac/NInject/MS DI

#DevJungles #dotnet #DI
Telegram канал Dev Jungles - https://t.me/DevJungles

GitHub Link: https://github.com/podkolzzzin/DI.Ideas

Поддержать канал можно:
- Спонсорством на YouTube
- Переводом на карту или пополнением банки монобанка:
Dev Jungles YouTube Channel Fund
https://send.monobank.ua/jar/7iAP3sZkm9

Номер карты банки:
5375 4112 0230 1466

- Или криптой:
BTC - 18C3jsFYwviN5FvzpAt4uMWRfUeVKvdWxy
ETH - 0x2903f63ba9009732272e91a299053b9d7b623216

USDT on ERC20 - 0x2903f63ba9009732272e91a299053b9d7b623216
USDT on TRC20 - TSmS5RzQKbWdxZkoM2oRo9HK8FYBaq744T

LTC - LN3CkrnvZLZTXDUhqTy1gUKMVpLjEPA4G2

DOGE - DPwon439jf3axVSBwyuXso6z7CivuJF655
AAVE - 0x2903f63ba9009732272e91a299053b9d7b623216
Waves - 3P8D57Zw7CrqW2o7dHpvZR2UzAzQRFA2kZd

Сейчас в любом проекте используется DI. В Asp.NET Core, есть встроенный контейнер, впрочем это не мешает часто использовать и сторонние контейнеры. Я, например, большой фанат такого контейнера как Autofac, знаю есть еще те, кто любит NInject или Unity.

Наверное, почти каждый задумывался о том как они работают. Кто-то примерно понимает как можно сделать что-то подобное, кто-то и близко не представляет. Стрим подойдет и для тех и для других. Первые узнают как самый простой вариант можно разогнать и какой performance он выдаст в сравнении со другими контейнерами, а последних я аккуратно и нужно проведу сквозь все нюансы этого в режиме livecoding.
Будет и Benchmarking и Reflection.Emit и деревья выражений(Expression Trees), может даже успеем немного коcнуться Source Generators.

Рубрика "Строим с нуля" на канале мне кажется наиболее ценной. Она на все 100% авторская, я сам придумываю код и прорабатываю как его по шагам лучше всего донести. Изучая что-либо я до конца мог разобраться в вопросе только создав что-то подобное с нуля: изучая коллекция я писал свои, изучая WinForms делал свою систему контролов итд. И когда проходишь такой путь, то он гравируется на подкорке мозга навсегда. Ты можешь забыть какие-то детали, но общий принцип останется с тобой навсегда. А значит используя готовые решения ты всегда будешь буквально чувствовать, как оно себя поведет в той или иной ситуации - ведь ты будешь знать почему.

Таймкоды:
0:00 - Вступление
0:53 - Основная идея!
2:14 - Дополнительные темы.

6:52 - Обзор чатика, новости канала.
11:40 - Что почитать про многопоточку 👀.
12:13 - Пояснил за DI , IoC , DIP 🔥.

18:20 - Начинаем разработку.
21:09 - Создаем пример DI контейнера .
24:04 - Transient , Scoped , Singletone 🔥.

25:40 - Структура DI контейнера .
28:21 - class ServiceDescriptor .
32:09 - пример ContainerBuilder .
34:01 - Методы расширения IContainerBuilder .

41:17 - Проверка чатика #1.
43:17 - Реализация IContainerBuilder и IContainer .
44:58 - Допиливаем недостающие классы и методы.
48:57 - метод CreateInstance() .

53:34 - Проверка DI контейнера .
56:45 - Приватные констуркторы - ваше личное дело. 😂

1:00:35 - Проверка чатика #2
1:02:29 - Кеширование метаданных и не только.

1:10:18 - Реализация методов RegisterTransient и Scope .
1:19:07 - Чатик попыл. 😂

1:12:54 - Реализация уничтожения объектов.
1:24:10 - Глубина проблемы и её решение.

1:32:15 - Проверка чатика #3
1:34:00 - Почему ConfigureAwait(false) ? 👀
1:34:18 - Объяснение ValueTask 👀.

1:36:55 - Оптимизация производительности DI контейнера .
1:43:25 - BaseActivationBuilder class.
1:52:11 - Прокидвание ActivationBuilder в DI контейнер .

1:57:34 - Бенчмарки для *DI контейнера*.
2:09:36 - Кейс использования Transient вместо Scope.🔥
2:11:01 - Анализ Бенчмарков.
2:12:07 - Добавления MS DI и Autofac для сравнения быстродействия.

2:19:05 - Кто какой контейнер использует на проектах.
2:21:28 - Какой lifetime использовать для DbContext? 🔥.
2:23:04 - AddDbContextPool() 🔥.
2:25:56 - Перезапуск бенчмарков.
2:27:32 - Неведомая причина создания DbContext вне контейнера.

2:32:51 - Проверка чатика #4
2:35:11 - Получили результаты бенчмарков.
2:36:20 - Как MSDI работает так быстро? 😳
2:46:16 - Как сбилдить кусок .Net Runtime и получить искомую сборку. 🤯
2:52:32 - Волшебные сборки от MSDI.

2:55:24 - Как это сделали Autofac ?
2:58:42 - Интеграция DI контейнера в ASP.
3:03:03 - Как заработать на 40 летних менеджерах по продажам #ВыИТиИзИт.😂
3:05:05 - Monitor vs ConcurrentDictionary в MS DI.

Видео Пишем с нуля Dependency Injection на C#/.NET | От "Hello World" до Autofac/NInject/MS DI канала Dev Jungles - Andrii Podkolzin
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять