Я разобрался в одном, но мне любопытно, есть ли лучший способ ...
string.replace(/\s+/g,' ').trim()
Я бы вообще сказал нет; природа внедрения зависимостей означает, что внедренный объект мало знает о жизненном цикле того, с чем он был внедрен; в какой-то степени это определение инъекции. Таким образом, я не думаю, что внедренный объект должен избавляться от всего, что было внедрено; код внедрения должен нести ответственность за знание полного жизненного цикла всех объектов, которые он вводит, и должен иметь возможность должным образом избавляться от них, когда все операции над ними будут завершены, а не раньше.
Если вы имеете в виду шаблон внедрения зависимостей , я думаю, что это зависит от знаний объекта B о реализации объекта A. Причина выполнения внедрения зависимостей обычно это происходит потому, что вы не знаете заранее, как будет реализован объект A и требуется ли для него IDisposable. Единственное, что вы знаете, это интерфейс.
Добавление этого поведения приведет к более тесной связи между двумя классами, IMO.
(правка: при ответе мне не было ясно, что вопрос касался IoC / DI; я оставлю это здесь для справки, но сначала посмотрите на принятый ответ).
Если под «введенным» вы имеете в виду, что B
принимает право собственности на A
, тогда да; Примером этого могут быть такие вещи, как StreamReader
.
Если он просто использует A
какое-то время (но A
продолжает жить после ] B
), затем №
Некоторые API-интерфейсы позволяют вам указать (в конструкторе), следует ли принимать право владения (т.е. очищать ли внедренный объект). Примером этого может быть GZipStream
.
Я думаю, что это действительно окажется субъективным.
Все будет сводиться к следующему: кто должен контролировать время жизни объекта A?
Скажем, например, объекты C и D также иметь объект A, введенный в них, в этом случае вы не хотите, чтобы объект B избавлялся от объекта A преждевременно.
Однако в некоторых случаях, когда вы знаете, что время жизни объекта A должно заканчиваться на B, вполне уместно иметь объект B избавиться от объекта A.
Мои 2p будут утверждать, что A не следует удалять, когда удаляется B. Вся идея внедрения зависимостей заключается в том, что вам не нужно беспокоиться о поведении и жизненном цикле объектов, которые вы получаете, вы просто передаете их.
И снова вы хотите убедиться, что объект будет очищен, как только это больше не требуется. Может быть, создать мини-систему событий, чтобы вы могли уведомить, что ее нужно утилизировать? Думаю, это действительно зависит от контекста.