Наши сервисы, обычно, реализуются в виде классов. При этом, классы C# могут иметь несколько конструкторов с различным набором параметров. Когда мы задействуем в работе контейнер DI, то мы фактически перекладываем все обязанности по созданию объектов сервисов на контейнер. Каким образом контейнер DI выбирает наиболее подходящий конструктор для создания объекта? В этой части мы рассмотрим правила обнаружения конструктора в .NET/C# использовании контейнера DI из Microsoft.Extensions.DependencyInjection.
Глава 24. Dependency Injection (DI)
Множественная регистрация сервисов
В своих примерах ранее, мы использовали следующий подход регистрации сервисов в контейнере DI: один сервис – одна реализация. Это, по-видимому, самый распространённый способ работы с сервисами в DI. Даже, если для одного сервиса у нас разработано несколько реализаций, то всё равно, мы при регистрации сервиса указываем только один тип. При этом может возникнуть ситуация, когда нам потребуется использовать несколько реализаций одного сервиса.
Жизненный цикл зависимостей (работа с ServiceCollection)
Получив первоначальные знания о работе с DI с использованием встроенных в .NET объектов, можно погрузиться в темы внедрения зависимостей более детально. В этой части мы более подробно изучим работу с сервисами, а именно — рассмотрим жизненный цикл зависимостей и использование сервисов с различными жизненными циклами.
Введение в сервисы
В предыдущей части мы рассмотрели простой пример использования внедрения зависимостей без каких-либо специальных средств и библиотек .NET. Этот пример показывает, как минимум то, что внедрение зависимостей (dependency injection) — это набор принципов и шаблонов проектирования, а не какая-то особенность или библиотека .NET. Тем не менее, разработчики .NET/C# постарались сделать нашу с вами работу с DI наиболее комфортной и удобной, предоставив нам ряд классов и интерфейсов, позволяющих использовать возможности DI с минимальными затратами времени на разработку. И сегодня мы перепишем наш пример, используя те возможности, которые нам предлагает платформа .NET
Dependency Injection в .NET/C#
Dependency Injection (DI, внедрение зависимостей) — это набор принципов и паттернов проектирования программных продуктов, позволяющий разрабатывать слабосвязанный код. Стоит отметить, что Dependency Injection — это не фреймворк, не библиотека классов и т.д. Применительно к .NET/C#, DI часто отождествляют с конкретным фреймворком — ASP.NET Core. Это неверно. Применение DI — это возможность вообще всей платформы .NET, однако, именно в ASP.NET Core мощь и красота Dependency Injection раскрываются наиболее полно. В этой части мы рассмотрим то, как можно использовать DI в своих приложениях.