2009-05-20 5 views

ответ

4

Я бы обычно сказал «нет»; природа инъекции зависимостей означает, что инъецируемый объект мало знает о жизненном цикле того, что он вводил; в некоторой степени это определение инъекции. Таким образом, я не думаю, что инъецируемый объект должен распоряжаться тем, что было введено; код инъекции должен нести ответственность за знание полного жизненного цикла всех объектов, которые он впрыскивает, и должен иметь возможность правильно распоряжаться ими, когда все операции над ними завершены, а не раньше.

1

Я думаю, что это действительно было бы субъективным.

Все это сводится к тому, кому следует контролировать срок службы объекта A?

Скажите, например, что объекты C и D также имеют объект A, введенный в них, в этом случае вы бы не захотели, чтобы объект B раньше убирал объект A.

Однако, в некоторых случаях, когда вы знаете, срок службы объекта А должен заканчиваться B, это вполне уместно, чтобы объект B распоряжаться объекта A.

5

Если вы имеете в виду dependency injection шаблон, я подумайте, что это зависит от знаний в Object B о реализации Object A. Причина для инъекции зависимостей, как это, обычно заключается в том, что вы заранее не знаете, как будет реализован Object A и требуется ли IDisposable. Единственное, что вы знаете, это интерфейс.

Добавление этого поведения приведет к более тесной связи между двумя классами, ИМО.

2

(отредактировано: при ответе на него мне не ясно, что вопрос о IoC/DI, я оставлю это здесь для справки, но сначала посмотрите на принятый ответ).

Если по "injected" вы имеете в виду, что B предполагает собственность A, тогда да; примером этого могут быть такие вещи, как StreamReader.

Если он просто используетA некоторое время (но A продолжает жить дальше B), то нет.

Некоторые API-интерфейсы позволяют указать (на конструкторе), следует ли предполагать право собственности (т. Е. Очистить вложенный объект). Примером этого может быть GZipStream.

1

Мое 2p должно было бы утверждать, что A не следует удалять, когда B расположен. Вся идея инъекции зависимостей заключается в том, что вам не нужно беспокоиться о бахавире и жизненном цикле объектов, которые вы получаете, вы просто передаете их.

Затем вы хотите, чтобы объект очищался, как только он больше не требуется. Может быть, создать мини-систему событий, чтобы вы могли уведомить ее о необходимости ее удаления? Наверное, это зависит от контекста.

+0

В этом случае вам понадобится какой-то подсчет ссылок, поэтому объект A не будет удален до некоторых классов, использующих его. –

Смежные вопросы