Контейнер внедрения зависимостей Joomla, сокращенно DIC, по сути, представляет собой хранилище пар ключ - значение, где:

  • ключ - это строка, которая (обычно) является полным именем класса или интерфейса
  • значение представляет собой экземпляр соответствующего класса или функцию, которая возвращает экземпляр этого класса.

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

Вы кладете вещи в контейнер, используя set() проходящий:

  • key = имя класса или интерфейса.
  • value = функция, которая возвращает экземпляр класса (или значением может быть просто экземпляр класса, без функции - оболочки)
  • shared - логическое значение, определяющее, может ли экземпляр класса быть общим или нет (т. е., если есть второй запрос к DIC для предоставления этого экземпляра, возвращает ли он тот же экземпляр или новый)
  • protected - логическое значение, определяющее, защищена ли эта запись в контейнере DI или нет (при попытке перезаписать защищенную запись путем вызова будет выдана ошибка set() снова используя тот же ключ).

Функция share() это в основном то же самое, что и set() с общим логическим значением, равным true.

Вы достаете вещи из контейнера, позвонив по телефону get() передача ключа нужного ресурса. Функциональность DI позволит

  • найти ключ в контейнере
  • если значение еще не является экземпляром класса, то оно запустит соответствующую функцию для создания экземпляра класса
  • если ресурс является общим, он сохранит экземпляр класса, так что при последующих вызовах get() он может просто вернуть экземпляр
  • верните вам экземпляр класса

Вы также можете определить псевдонимы для каждого ключа в контейнере, что означает, что вы вызываете get() передача либо ключа, либо псевдонима ключа.