Главная страница   /   8. Жизненный цикл объектов (Внедрение зависимостей в .NET

Внедрение зависимостей в .NET

Внедрение зависимостей в .NET

Марк Симан

8. Жизненный цикл объектов

Меню:

  • Управление жизненным циклом зависимостей
  • Устраняемые зависимости
  • Singleton
  • Transient
  • Per Graph
  • Web Request Context
  • Pooled

Истечение срока действия основательно влияет на большинство продуктов и напитков, но последствия сильно различаются. Лично я считаю 12-месячный Gruyère (швейцарский сыр) гораздо более интересным, нежели 6-месячный Gruyère, но предпочитаю, чтобы аспарагус был свежее 12-месячного и 6-месячного Gruyère. В большинстве случаев оценить точный возраст элемента довольно просто; но в определенных случаях этот процесс становится очень сложным. Истечение срока действия наиболее значимо, когда дело касается вина (см. рисунок 8-1).

Рисунок 8-1: Вино, сыр и аспарагус. Несмотря на то, что, если смешать эти ингредиенты мы получим не совсем хороший результат, возраст этих ингредиентов значительно влияет на их общее качество.

С годами вина становятся лучше – до тех пор, пока они не станут слишком старыми и не потеряют свой аромат. Это зависит от множества факторов, включая происхождение и урожай вина. Несмотря на то, что я интересуюсь винами, я даже и не надеюсь, что смогу определить, когда вино достигнет своего полного расцвета. В этом вопросе я полагаюсь на экспертов: на книги – дома и на сомелье – в ресторанах. Они разбираются в винах лучше меня, так как это их специальность, поэтому всякий раз, когда я им доверяюсь в вопросе выбора вина, я с удовольствием позволяю им взять все под свой контроль.

За исключением того случая, когда вы перешли к данной главе, не читая при этом ни одной из предыдущих глав, вы понимаете, что возможность уйти от контроля является ключевой концепцией механизма внедрения зависимостей. Это проблема инверсии управления, но она подразумевает больше, чем просто позволение кому-то отобрать реализацию необходимой абстракции. Когда мы позволяем Composer (Компоновщик) создавать зависимость, мы также должны принять тот факт, что не сможем контролировать ее жизненный цикл.

Поскольку сомелье хорошо знает содержания винных подвалов ресторана и может принять гораздо более информативное решение, нежели бы это сделали мы, способность контролировать жизненный цикл зависимостей мы должны с наибольшей эффективностью доверять Composer (Компоновщик), чем потребителю. Компоновка и управление компонентами – это единичная ответственность.

Определение

Composer – в том смысле, в котором я его использую здесь, это унифицированный термин, обозначающий любой объект или метод, который компонует зависимости. Чаще всего это DI-контейнер, но может быть и любым методом, который используется в Poor Man's DI, например, метод Main консольного приложения.

В данной главе мы будем рассматривать процесс управления жизненным циклом зависимостей. Понимание этой темы важно, поскольку точно так же, как вы можете приобретать неудовлетворительный опыт при употреблении вина неправильного возраста, вы можете получить ухудшенное выполнение, неправильно сконфигурировав жизненный цикл зависимостей. Даже хуже того, вы можете получить аналог испортившегося продукта для механизма управления жизненным циклом: утечки ресурсов. Понимание принципов корректного управления границами жизненных циклов компонентов должно дать вам возможность принимать правильные решения и корректно конфигурировать ваши приложения.

Примечание

На всем протяжении данной главы я использую термины тип стиля существования, стратегия жизненного цикла, границы жизненного цикла и другие редко встречающиеся сочетания взаимозаменяемо.

Как иллюстрирует рисунок 8-2, мы начнем с общего введения к концепции, за которым следует обсуждение устраняемых зависимостей. Первая часть главы предназначена для того, чтобы предоставить вам всю теоретическую информацию и необходимые вам ведущие принципы для того, чтобы принимать умное, взвешенное решение по поводу конфигурации границ жизненного цикла ваших собственных приложений.

Рисунок 8-2: Полная структура данной главы. Мы начнем с общего обсуждения процесса управления жизненным циклом зависимостей, включая конкретное обсуждение работы с устраняемыми объектами. Нам необходимы эти фундаментальные знания для того, чтобы эффективно обсуждать универсальные паттерны небольшого каталога стилей существования, рассматриваемого далее. Мы начнем с рассмотрения некоторых универсальных и очень полезных паттернов и закончим кратким обзором некоторых более экзотичных стилей существования для того, чтобы дать вам ощущение широты данной темы.

После этого мы будем использовать остальную часть главы для рассмотрения различных стратегий жизненного цикла. Эта часть книги принимает форму каталога доступных стилей существования. В большинстве случаев один из этих шаблонных паттернов стилей существования будет отлично подходить для решения конкретной задачи, поэтому заблаговременное понимание этих стилей снабжает вас достаточными знаниями для того, чтобы справляться со многими сложными ситуациями. Когда мы закончим изучение этой главы, вы должны будете хорошо разбираться в управлении жизненном циклом и в универсальных жизненных циклах.

Для начала давайте рассмотрим жизненный цикл объектов и то, каким образом он в общем смысле относится к механизму внедрения зависимостей.

8.1. Управление жизненным циклом зависимостей

8.2. Работа с устраняемыми зависимостями

8.3. Каталог стилей существования объектов

8.4. Резюме