У меня есть библиотека, используемая двумя приложениями Symfony, эта библиотека определяет набор сервисов, которые я хочу сделать общедоступными (я хочу иметь возможность получать их напрямую через контейнер. Когда я пытаюсь получить доступ к одному сервису, у меня есть это:
Служба «Library\Service\DerivedServices\OneSpecificImplementation» или псевдоним был удален или встроен при компиляции контейнера. Вы должны либо сделать его общедоступным, либо прекратить использовать контейнер напрямую и вместо этого использовать внедрение зависимостей.
Проблема в том, что указанная служба является общедоступной.
В основном есть:
- класс
Library\Service\BaseService
, у которого есть два установщика для общих зависимостей (доктрина и регистратор в этом фрагменте); - несколько производных классов (в пространстве имен
Library\Service\DerivedServices
), каждый из которых определяет новую службу (с собственным конструктором для непосредственной обработки DI).
Итак, вот мои определения услуг:
# Base: inject common dependencies
Library\Service\BaseService:
abstract: true
calls:
- [setDoctrine, ['@doctrine.orm.entity_manager']]
- [setLogger, ['@Library\Service\Logger']]
# These services are public to be retrieved directly by the container interface
Library\Service\DerivedServices\:
resource: '../vendor/company/library/src/Library/Service/DerivedServices'
public: true
autowire: true
autoconfigure: false
parent: Library\Service\BaseService
Затем приложение Symfony извлекает один производный сервис, например:
$this->get('Library\Service\DerivedServices\OneSpecificImplementation');
Это не имело никакого значения:
- Я изменил порядок определений службы
- Оба приложения работают под управлением Symfony 4.3.3.
Я думаю, что это что-то тривиальное с точки зрения конфигурации, но я не могу точно определить это (и после 2 часов попыток отладки, почему фреймворк компилирует мой сервис как частный, я подумал, что у кого-то это, вероятно, было и, возможно, может мне помочь).
resource: '../vendor/company/library/src/Library/Service/DerivedServices/*'
? - person Federkun   schedule 09.08.2019