Перейти к содержимому

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

Dev Jungles - Andrii Podkolzin

0:00 / 0:00

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

22 141 просмотр · Трансляция закончилась 4 года назад
Dev Jungles - Andrii Podkolzin
15,4 тыс. подписчиков
22 141 просмотр · Трансляция закончилась 4 года назад
#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.