Содержание
- 2. Меня хорошо видно && слышно? Ставьте , если все хорошо Напишите в чат, если есть проблемы
- 3. Стандартный и нестандартные DI контейнеры в ASP.NET Core Гранковский Андрей Архитектор направления Альфа-Банк https://www.linkedin.com/in/agrankovskiy/
- 4. Гранковский Андрей 8 лет опыта в разработке программного обеспечения и из них последние 6 лет в
- 5. Активно участвуем Задаем вопрос в чат Вопросы вижу в чате, могу ответить не сразу Правила вебинара
- 6. Цели вебинара 1 Повторить преимущества DI/IOC принципа и основные возможности DI-контейнера для ASP.NET Core 2 Изучить
- 7. Смысл | Зачем вам это уметь DI - контейнеры - важнейший механизм для построения расширяемой архитектуры
- 8. Маршрут вебинара Best Practices/DI/IOC DI-контейнер ASP.NET Core Жизненный цикл объектов в DI-контейнере Нестандартные DI- контейнеры и
- 9. Репозиторий с примером Репозиторий с проектом для занятия, кому удобнее смотреть у себя - клонируем https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 10. DI/IOC
- 11. Маршрут вебинара Best Practices/DI/IOC DI-контейнер ASP.NET Core Жизненный цикл объектов в DI-контейнере Нестандартные DI- контейнеры и
- 12. Best Practices
- 13. Вопрос Кто уже делал дополнительное задание про Employees CRUD в первом ДЗ? Напишите в чат +
- 14. Вопрос Как вы считаете много ли кода приходится на заполнение и маппинг данных из одних объектов
- 15. Минутка Best Practices Такого кода очень много, многие операции бизнес-логики сводятся к простому маппингу в существующие
- 16. Минутка Best Practices Стараемся выносить маппинг и создание объектов в отдельные компоненты (Мапперы, Фабрики) и/или использовать
- 17. Инициализация и мапперы
- 18. Инициализация и мапперы Плюсы: Лучше Single Responsibility; Соблюдаем инкапсуляцию при создании объектов; Меньше багов Легче покрыть
- 19. Про Automapper Эти проблемы частично решает Automapper, но обычно в сторону простых моделей от Entities, плюс
- 20. Инициализация и мапперы https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di EmployeesBestPracticesController
- 21. DI/IOC
- 22. Вопрос Тайминг: 2 минуты Что вообще такое зависимость класса? Напишите в чат или -, если нужно
- 23. Зависимости классов Зависимость — это любой объект, который требуется другому объекту.
- 24. Зависимости классов Зависимость Зависимость Зависимость
- 25. Вопрос Какие есть проблемы/преимущества у данных вариантов зависимостей? Напишите в чат по каждому виду: цифра -
- 26. Пример проблем с зависимостями из жизни
- 27. Пример проблем с зависимостями из жизни Есть Web-приложение, в нем есть функция генерации .pdf файла отчета
- 28. Dependency Injection Чтобы явно знать от каких классов зависит другой класс мы используем инъекции в конструктор,
- 29. SOLID S - Single Responsibility principle O - Open/Closed principle L - Liskov substitution principle I
- 30. Вопрос В чем отличие Dependency Injection и почему говорят еще про Dependency Inversion и Inversion of
- 31. Многоуровневая и гексагональная архитектура В чем разница у этих архитектур с точки зрения DI/IOC или ее
- 32. DI/IOC Формулировка: Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны
- 33. Контейнер Контейнер зависимостей (DI-контейнер) - это только инструмент создания/жизненного цикла и инъекции зависимостей, он ничего не
- 34. Гексагональная архитектура Port Port Port Port Port Port Domain Entities Application Services /Use Cases ASP.NET Core
- 35. DI-контейнер ASP.NET Core
- 36. Маршрут вебинара Best Practices/DI/IOC DI-контейнер ASP.NET Core Жизненный цикл объектов в DI-контейнере Нестандартные DI- контейнеры и
- 37. ASP.NET Core и DI DI - это основа архитектуры ASP.NET Core и отличие от предыдущего ASP.NET,
- 38. Возможности DI-контейнера ASP.NET Core Встроенный контейнер зависимостей предназначен для платформы ASP.NET Core и большинства клиентских приложений;
- 39. Возможности DI-контейнера ASP.NET Core Контейнер не поддерживает функции, которые на самом деле не нужны для большинства
- 40. Где конфигурируем зависимости? IServiceCollection - основная абстракция для работы с сервисами, которые хотим зарегистрировать в контейнере
- 41. Основные методы и сущности IServiceCollection (Список сущностей) BuildServiceProvider (Фиксируем зависимости) IServiceProvider.GetService (Получаем зависимость) Идемпотентные (в основном
- 42. Как работать с контейнером изолированно https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 43. Жизненный цикл объектов в DI-контейнере
- 44. Маршрут вебинара Best Practices/DI/IOC DI-контейнер ASP.NET Core Жизненный цикл объектов в DI-контейнере Нестандартные DI- контейнеры и
- 45. Жизненный цикл объектов в DI-контейнере Scoped Transient Singleton Три вида жизненного цикла зависимостей
- 46. Вопрос Тайминг: 2 минуты Что такое Transient и зачем нам может понадобиться Transient зависимость? Напишите в
- 47. Transient в ASP.NET Core Зависимость создается каждый раз, когда она нам нужна, хорошо подходит для Stateless
- 48. Transient зависимости https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 49. Singleton в ASP.NET Core Один экземпляр на все запросы, то есть будет создан один раз, не
- 50. Singleton зависимости https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 51. Вопрос Тайминг: 2 минуты Как работает Scoped для ASP.NET Core? Напишите в чат или -, если
- 52. Scoped в ASP.NET Core Основное, что надо знать про Scoped в ASP.NET Core: Будет создан один
- 53. Как создаем Scope https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 54. Зачем создавать новый Scope? Например, если все зависимости в рамках запроса разрешены, как Scoped, а нам
- 55. Про жизненный цикл При старте приложения ASP.NET Core собираем провайдер Провайдер будет существовать пока не остановим
- 56. Нестандартные DI-контейнеры и расширения
- 57. Маршрут вебинара Best Practices/DI/IOC DI-контейнер ASP.NET Core Жизненный цикл объектов в DI-контейнере Нестандартные DI- контейнеры и
- 58. Зачем менять DI контейнер в ASP.NET Core Инъекция в свойство; Инъекция по имени; Дочерние контейнеры; Настраиваемое
- 59. DI контейнеры в .NET Autofac Castle Windsor Lamar LightInject Ninject SimpleInjector Spring.NET Unity LinFu (inactive) Managed
- 60. Сравнение контейнеров Можно посмотреть по ссылке: https://danielpalme.github.io/IocPerformance Если кратко Autofac достаточно производительный и является одним из
- 61. Контейнер Autofac Очень популярен для ASP.NET MVC и имеет хорошую интеграцию с Core и документацию; Есть
- 62. Подключаем Autofac https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 63. Динамическое разрешение зависимостей через модули https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 64. Вопрос Тайминг: 2 минуты Зачем нам может понадобиться инъекция в свойство? Напишите в чат или -,
- 65. Инъекция в свойство Может быть полезно если у нас есть базовый контроллер, который написали сами и
- 66. Инъекция в свойство https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di
- 67. Динамическое разрешение зависимостей через фабрику Если мы уже собрали контейнер, то в него просто так не
- 68. Динамическое разрешение зависимостей через фабрику https://gitlab.com/devgrav/otus.teaching.promocodefactory.demo.di Попробуйте по этим ссылкам настроить сами после занятия https://stackoverflow.com/questions/54127414/using-factory-pattern-with-asp-net-core-dependency-injection https://espressocoder.com/2018/10/08/injecting-a-factory-service-in-asp-net-core/
- 69. Конфигурация по соглашению На самостоятельную проработку Чтобы не писать каждый раз Add каждого сервиса было бы
- 70. Конфигурация по соглашению Можно использовать специальный контейнер вместо стандартного, но это может быть тяжелое решение, поэтому
- 71. Конфигурация по соглашению Можно посмотреть в документации Autofac https://autofaccn.readthedocs.io/en/latest/register/scanning.html
- 72. Scrutor https://andrewlock.net/using-scrutor-to-automatically-register-your-services-with-the-asp-net-core-di-container/ https://github.com/khellang/Scrutor Удобное расширение для ASP.NET Core контейнера DI
- 73. Выводы 1 2 3 Повторить преимущества DI/IOC принципа и основные возможности DI-контейнера для ASP.NET Core Изучили
- 74. Список материалов для изучения Внедрение зависимостей в .NET. Марк Симан https://www.ozon.ru/context/detail/id/22104901/ Чистая архитектура. Роберт Мартин https://www.ozon.ru/context/detail/id/144499396/
- 75. Заполните, пожалуйста, опрос о занятии по ссылке https://otus.ru/polls/15890/ Лучше всего написать что-то текстом!)
- 77. Скачать презентацию