В разделе с описанием Контейнера для фреймворка HLEB2 данной документации уже есть простой пример с добавлением демонстрационного сервиса. Далее рассмотрим пример с добавлением реальной библиотеки для мьютексов как Сервиса.
Библиотека github.com/phphleb/conductor содержит механизм мьютексов, если вы собираетесь использовать эту библиотеку, то её нужно сначала установить.
Вполне возможно назначить ключ в контейнере как класс из библиотеки, но в дальнейшем с этим могут быть проблемы, так как код приложения будет завязан на конкретный класс или интерфейс библиотеки, с невозможностью его подменить.
Внешние библиотеки лучше подключать к проекту используя паттерн Адаптер, класс которого и будет ключом сервиса в контейнере.
Этот класс обёртки для сервиса создан в папке /app/Bootstrap/Services/. Несмотря на то, что это удобная директория для примеров, структурно папка с Сервисами должна находиться рядом с логикой проекта.
Теперь добавим библиотеку в контейнер по созданному классу:
На примере видно, что в метод rollback() добавлен сброс состояния для подключенной библиотеки мьютексов, которая поддерживает асинхронность.
После добавления новый сервис доступен из контейнера по этому классу как singleton.
Способ использования добавленного сервиса в контроллерах, командах и событиях (во всех классах, унаследованных от Hleb\Base\Container):
Упростить приведённый вызов сервиса можно при добавлении нового одноимённого метода mutex() в класс App\Bootstrap\BaseContainer и его интерфейс:
Теперь вызов будет выглядеть так: