TYPO3:使用构造函数将服务类注入 AuthServiceClass

我正在使用 TYPO3 10.2 并尝试将我创建的一些服务类注入到我的身份验证服务中。


class AuthService extends \TYPO3\CMS\Core\Authentication\AuthenticationService

AuthService 中的构造函数:


    /**

     * Contains the configuration of the current extension

     * @var ConfigurationService

     */

    protected $configurationService;


    /**

     * @var RestClientService

     */

    protected $restClientService;


    /**

     * @var ConnectionPool

     */

    protected $connectionPool;


    /**

     * 

     * @param ConfigurationService $configurationService

     * @param RestClientService $restClientService

     * @param ConnectionPool $connectionPool

     */

    public function __construct(ConfigurationService $configurationService, RestClientService $restClientService, ConnectionPool $connectionPool)

    {

        $this->configurationService = $configurationService;


        $this->restClientService = $restClientService;


        $this->connectionPool = $connectionPool;

    }

我收到以下错误:


函数 Vendor\MyExt\Service\AuthService::__construct() 的参数太少,第 3461 行的 C:\xampp\htdocs\myproject\typo3\sysext\core\Classes\Utility\GeneralUtility.php 中传递了 0,而预期为 3


有什么建议吗?


我在 ControllerClass 中使用了相同的构造函数,并且在那里一切正常。


到目前为止感谢!


尚方宝剑之说
浏览 100回答 1
1回答

波斯汪

看起来您AuthenticationService的内部实例化为GeneralUtility::makeInstance(). 对于您在某些时候注册的许多类都是如此,然后 TYPO3 负责创建类(想想用户函数、插件控制器、模块控制器、身份验证服务、挂钩等)。GeneralUtility::makeInstance()需要将类从 DI 容器中取出以使 DI 工作,但这仅适用于public在容器编译期间创建的类。出于这个原因,您的问题的解决方案应该是AuthService在您的Configuration/Services.yaml:services:  _defaults:    autowire: true    autoconfigure: true    public: false  Vendor\MyExt\:    resource: '../Classes/*'  Vendor\MyExt\Service\AuthService:    public: true您可以在官方文档或我关于该主题的博客文章中找到解释。
打开App,查看更多内容
随时随地看视频慕课网APP