Я понимаю, что DI - это очень гибкий шаблон проектирования, хотя я изо всех сил пытаюсь принять его как «серебряную пулю» для создания развязанного кода.
Вот почему: Что происходиткогда зависимый объект имеет более длительный срок службы, чем зависимости, в которые он был введен?
Пример приложения: У меня есть класс BusinessLogic
, который создается для всего срока службы моего приложения.Для этого класса требуется объект DataContext
для выполнения операций с базой данных.Ранее я создал реферат DataContextFactory
с двумя реализациями: StaticDataContextFactory
и WebDataContextFactory
.Первый поддерживает один DataContext для всего жизненного цикла приложения, тогда как второй будет создавать новые DataContexts для каждого HTTP-запроса.
Проблема в примере: Как видите, все будетхорошо, когда используется StaticDataContextFactory
.Однако, когда используется WebDataContextFactory
, BusinessLogic
завершится неудачей, поскольку он вводится с DataContext
, срок действия которого истекает / удаляется после завершения первого запроса.
Мой вопрос: Должны ли все зависимые объекты иметь время жизни, которое меньше или равно времени жизни его зависимостей?Если так, то что происходит, когда время жизни каждой зависимости неизвестно коду, который создает экземпляры зависимых классов?