我正在尝试使用新的目录结构和所有内容将SF 3.3应用程序迁移到SF 4 .
我在这个例外上苦苦挣扎:
编译容器时,“simplethings_entityaudit.reader”服务或别名已被删除或内联 . 您应该将其公开,或者直接停止使用容器并改为使用依赖注入 .
(此服务来自/ vendor中的外部包) .
然而,当我 bin/console debug:container simplethings_entityaudit.reader
你会看到服务存在并且是公开的:
Information for Service "simplethings_entityaudit.reader"
=========================================================
----------------- --------------------------------------
Option Value
----------------- --------------------------------------
Service ID simplethings_entityaudit.reader
Class SimpleThings\EntityAudit\AuditReader
Tags -
Public yes
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired no
Autoconfigured no
Factory Service simplethings_entityaudit.manager
Factory Method createAuditReader
----------------- --------------------------------------
此服务目前使用 $this->container->get('simplethings_entityaudit.reader')
在我自己的服务中调用 .
我也尝试将 SimpleThings\EntityAudit\AuditReader
注入我的服务构造函数中,但这是我得到的:
方法“__construct()”的参数“$ auditReader”引用类“SimpleThings \ EntityAudit \ AuditReader”,但不存在此类服务 . 它无法自动注册,因为它来自不同的根命名空间 .
当我将它添加到我的 services.yaml
时,它可以工作,但我不应该这样做:
SimpleThings\EntityAudit\AuditReader:
alias: simplethings_entityaudit.reader
有任何想法吗?
1 回答
在Symfony 4.0中,任何未指定其可见性的服务都是私有的,https://github.com/symfony/symfony/pull/24238 .
据我所知,您提到的服务没有指定可见性:https://github.com/simplethings/EntityAuditBundle/blob/1.0/src/SimpleThings/EntityAudit/Resources/config/auditable.xml#L23-L26,所以这可能是您例外的原因 .
如果
simplethings_entityaudit.reader
服务无法自动装配(这可能是因为它使用工厂服务),您可以通过使用@simplethings_entityaudit.reader
表示法将其注入您自己的服务中:https://symfony.com/doc/current/service_container.html#services-manually-wire-args,如下所示: