ZF2服务工厂没有注入

时间:2016-01-23 17:57:30

标签: php dependency-injection zend-framework2

我在解决可捕获的错误时遇到问题:

  

可捕获的致命错误:参数1传递给   Market \ Service \ UserService :: __ construct()必须是。的实例   市场\映射器\ UserMapperInterface,

在我的UserService的构造函数中,我使用UserMapperInterface(依赖注入)。我为此创建了一个工厂类,并在service_manager配置中注册了它。什么都没发生,并显示错误。

我创建工厂和服务19287319827次,但现在我不知道如何解决这个noob致命错误。

配置:

'service_manager' => array(
    'factories' => array(
        'Market\Service\UserServiceInterface' => 'Market\Factory\UserServiceFactory',
    )
),

服务

class UserService implements UserServiceInterface
{
    /**
     * @var object Market\Mapper\UserMappperInteface
     */
    protected $userMapper;

/**
 * UserService constructor.
 *
 * @param UserMapperInterface $userMapperInterface
 */
public function __construct(UserMapperInterface $userMapperInterface)
{
    $this->userMapper = $userMapperInterface;
}

工厂:

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Market\Service\UserService;

    class UserServiceFactory implements FactoryInterface
    {
        /**
         * Create service
         *
         * @param ServiceLocatorInterface $serviceLocator
         * @return mixed
         */
        public function createService(ServiceLocatorInterface $serviceLocator)
        {
            $userMapperInteface = $serviceLocator->get('Market\Mapper\UserMapperInterface');

            return new UserService($userMapperInteface);
        }
    }

我无法相信我无法解决这个菜鸟的致命错误。我正在查找并查找我的代码中的最后2个小时,我一直在检查所有内容,我认为一切看起来都不错,但课程没有注入我的工厂。

1 个答案:

答案 0 :(得分:0)

你的问题在于这一行:

$userMapperInteface = $serviceLocator->get('Market\Mapper\UserMapperInterface');

它可能会返回null或至少是预期UserMapperInterface实例的其他内容。由于您没有共享任何关于Market\Mapper\UserMapperInterface定义或构建的方式和位置的代码,因此很难说出究竟出了什么问题......

如果您自己无法弄清楚,请分享有关该部分的更多详情。