Php Zend2依赖项注入工厂到服务

Php Zend2依赖项注入工厂到服务,php,pdo,dependency-injection,zend-framework2,Php,Pdo,Dependency Injection,Zend Framework2,我正在尝试使用Zend2服务管理器实现依赖注入。我想在服务中注入一个PDO实例(我不使用Zend Db) 我在这里学习教程: 我让它为另一个服务工作,但是当注入PDO实例时,我得到以下错误: 可捕获的致命错误:传递给Application\Service\DataService::\uu construct()的参数1必须是Application\Service\DbConnectorService的实例,未给出任何实例,在第1077行的/srv/www/shared apps/approt/a

我正在尝试使用Zend2服务管理器实现依赖注入。我想在服务中注入一个PDO实例(我不使用Zend Db)

我在这里学习教程:

我让它为另一个服务工作,但是当注入PDO实例时,我得到以下错误:

可捕获的致命错误:传递给Application\Service\DataService::\uu construct()的参数1必须是Application\Service\DbConnectorService的实例,未给出任何实例,在第1077行的/srv/www/shared apps/approt/apps dev/ktrist/SBSDash/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php中调用,并在第24行的/srv/www/shared apps/approt/apps dev/ktrist/SBSDash/module/Application/src/Application/Service/DataService.php中定义

从教程来看,这似乎与module.config中的可调用项有关。但我搞不清楚问题是什么

任何建议都将不胜感激

这是我的密码:

数据服务:

class DataService {
protected $dbConnectorService;

public function __construct(DbConnectorService $dbConnectorService) {
    $this->dbConnectorService = $dbConnectorService;
}
......
数据服务工厂:

namespace Application\Factory;

use Application\Service\DataService;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class DataServiceFactory implements FactoryInterface {

function createService(ServiceLocatorInterface $serviceLocator) {
    $realServiceLocator = $serviceLocator->getServiceLocator();
    $dbService = $realServiceLocator->get('Application\Service\DbConnectorService');

    return new DataService($dbService);
}

}
Module.Config:

'controllers' => array(
'factories' => array(
        'Application\Controller\Index' => 'Application\Factory\IndexControllerFactory',
        'Application\Service\DataService' => 'Application\Factory\DataServiceFactory',
    )
),
    'service_manager' => array(
    'invokables' => array(
        'Application\Service\DataServiceInterface' => 'Application\Service\DataService',
        'Application\Service\DbConnectorService' => 'Application\Service\DbConnectorService',
    )
),

您正在尝试将服务创建为“可调用”类。ZF2将此服务视为一个没有依赖项的类(而不是使用工厂创建它)

您应该更新服务配置,以便在指向工厂类名的
'factories'
键下注册

'service_manager' => [
    'invokables' => [
        'Application\\Service\\DbConnectorService'
            => 'Application\\Service\\DbConnectorService',
    ],
    'factories' => [
        'Application\\Service\\DataServiceInterface' 
            => 'Application\\Factory\\DataServiceFactory',
    ],
],

如果
DbConnectorService也有工厂,则需要对其进行相同的更改。

您正在尝试将该服务创建为“可调用”类。ZF2将此服务视为一个没有依赖项的类(而不是使用工厂创建它)

您应该更新服务配置,以便在指向工厂类名的
'factories'
键下注册

'service_manager' => [
    'invokables' => [
        'Application\\Service\\DbConnectorService'
            => 'Application\\Service\\DbConnectorService',
    ],
    'factories' => [
        'Application\\Service\\DataServiceInterface' 
            => 'Application\\Factory\\DataServiceFactory',
    ],
],

如果
DbConnectorService
也有工厂,则您需要对其进行相同的更改。

您确定
factory
位于
控制器
阵列中吗?它应该在
服务\u管理器中
。您确定
工厂
控制器
阵列中吗?它应该在
服务管理器中