Я только начал использовать 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» не может быть разрешена: параметр $repository функции __construct() не имеет значения, определенного или предполагаемого. Полное определение: объект ( 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' )
];
Все работает нормально.
Что не так с моей конфигурацией?