0

我刚开始使用PHP-DI,它很棒,但是我无法解决一个问题。

这是我的服务定义

<?php

return [
    'services.report'=> DI\autowire( '\CRM\Report\Service\ReportService' ),
    '\CRM\Report\Service\ReportServiceContract' => DI\get ( 'services.report' )
];

我的班级定义如下

class ReportService implements ReportServiceContract {
    private $repository;

    /**
     * ReportService constructor.
     * @Inject("repositories.report_tasks")
     *
     * @param $repository
     */
    public function __construct( $repository ) {
        $this->repository = $repository;
        var_dump( $this->repository->getReportTaskById( 1 )->getDateSubmitted() );
    }

}

具有该配置我收到以下错误

无法解析条目“services.report”:__construct() 的参数 $repository 没有定义或猜测的值 完整定义:对象 ( class = \CRM\Report\Service\ReportService lazy = false __construct( $repository = #UNDEFINED# ) )

我试图调试源代码,并注意到甚至AnnotationReader没有创建一个实例。

但是当使用以下定义时

 <?php

    return [
'services.report' => DI\autowire( '\CRM\Report\Service\ReportService' )->constructorParameter('repository',DI\get('repositories.report_tasks')),
        '\CRM\Report\Service\ReportServiceContract' => DI\get ( 'services.report' )
    ];

一切正常。

我的配置有什么问题?

4

1 回答 1

0

要使用注释,需要启用(默认情况下禁用): http: //php-di.org/doc/annotations.html#installation

默认情况下禁用注释。为了能够使用它们,您首先需要使用 Composer安装Doctrine Annotations库:

composer require doctrine/annotations

然后你需要配置ContainerBuilder它们来使用它们:

$containerBuilder->useAnnotations(true);
于 2018-04-02T10:59:50.817 回答