Symfony2服务DI不解析我的构造函数参数

时间:2014-01-19 13:40:47

标签: symfony dependency-injection doctrine-orm

在我的Symfony2应用程序中,我创建了一个监听Doctrine事件的监听器。

这是我的听众课程:

use Symfony\Component\DependencyInjection\ContainerInterface;

class ProductListener
{
    private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    public function postPersist(Product $product, LifecycleEventArgs $args)
    {
        // some stuff
    }
} 

我想在构造函数中注入symfony DI容器。所以我配置我的services.xml:     

<container xmlns="http://symfony.com/schema/dic/services"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="doctrine.listener.product_listner.class">JDecool\Bundle\MyBundle\Listener\ProductListener</parameter>
    </parameters>

    <services>
        <service id="doctrine.listener.product_listner" class="%doctrine.listener.product_listner.class%">
            <argument type="service" id="service_container" />
            <tag name="doctrine.event_listener" event="postPersist" />
        </service>
    </services>

</container>

配置看起来很好,因为我没有任何错误。但是当我的listner捕获一个事件时,构造函数依赖关系没有解决,我有这个错误:

ContextErrorException: Warning: Missing argument 1 for JDecool\Bundle\MyBundle\Listener\ProductListener::__construct()

我不明白为什么依赖无法解决。 我的监听器由我的实体中的 EntityListeners 注释注册。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

就像@Cerad所说的那样,EntityListeners注释与我注册的听众之间存在混淆。

如果我删除了ethe EntityListeners注释,它的工作完美无缺!