В новом ASP.NET Core используется большое количество инъекций зависимостей для написания кода.
Например, в нашем курсе «Стартап» мы видим следующее:
AddMvc AddDbContext включает AddDirectoryBrowser, который мы использовали для экскурсий по каталогам:
Все они — это фреймворки, которые предоставляют качественные услуги, и мы можем использовать их напрямую, внедряя в них.
Инверсия управления (IoC) — это принцип проектирования объектно-ориентированного программирования, который может использоваться для уменьшения взаимодействия между компьютерным кодом. Самый распространённый метод называется Dependency Injection (DI), а также существует метод под названием «Dependency Lookup». Контролируя инверсию, при создании объекта внешняя сущность, управляющая всеми объектами системы, передаёт ему ссылку на объект, от которого она зависит. Также можно сказать, что в объект вводятся зависимости. Чтобы использовать ioc, класс Startup должен ссылаться на Microsoft.Extensions.DependencyInjection(ps), что уже довольно просто: Microsoft... Расширяй... Инъекция зависимостей - - ,)
Инжекция жизненного цикла сервиса
Microsoft предоставляет 3 жизненных цикла для сервисов с самоинъекцией.
Временные
Мгновенный сервис жизненного цикла, который создаётся каждый раз при запросе. Этот жизненный цикл лучше всего подходит для лёгких услуг без статуса.
Область действия
В том же масштабе сервис создаётся только один раз за каждый запрос.
Singleton (Only)
Глобальный файл создаётся только один раз — при первом запросе, после чего он всегда используется.
Как использовать эти три жизненных цикла? При инъекции можно использовать разные методы напрямую, код таков:
Давайте проверим конкретное поколение этих трёх жизненных циклов
Мы пишем три интерфейса с разными названиями и тремя классами для реализации интерфейсов, следующим образом:
В конструкторе каждого класса реализации мы генерируем новый GUID, который позволяет определить, был ли класс повторно выполнен конструктор.
Инжекция сервисов в контроллер
Обычно существует три способа инъекции: инъекции конструктора, методная инъекция и атрибутная инъекция. Собственный IOC-контейнер Microsoft по умолчанию использует инъекцию конструкторов (Инъекция атрибутов не поддерживается, но это возможно с помощью замены контейнера третьей стороны)
Код просмотра страницы:
Запустите проект и получите доступ к нему через два разных браузера, как показано ниже:
Мы обнаружили, что GUID, генерируемые дважды за мгновенный жизненный цикл, непоследовательны, что указывает на то, что объект отличается от одного и того же.
Однако жизненный цикл области одинаков, потому что при одной области GUID сервиса, используемого дважды в одном браузере, совпадает с тем же объектом, что указывает на использование одного и того же объекта.
В случае синглтона два разных браузера всегда обращаются к одному и тому же GUID, что указывает на вызов одного и того же объекта.
(Конец)
|