为什么在请求服务时收到错误的对象

问题描述:

我正在定义一个新的身份验证提供程序,并且需要访问密码编码器工厂,所以我将提供程序定义为服务并要求注入编码器。这里是我的服务定义:为什么在请求服务时收到错误的对象

services: 
    wsse.security.authentication.provider: 
     class: Fdi\CliperestBundle\Security\Authentication\Provider\WsseProvider 
     arguments: [@security.encoder_factory,'', %kernel.cache_dir%/security/nonces] 

所以我期待我的供应商的构造会得到Symfony\Component\Security\Core\Encoder\EncoderFactory类型的对象。但我得到了一个Symfony\Component\Security\Core\User\ChainUserProvider而不是!

有谁知道我为什么得到这个对象,我能做些什么来获得EncoderFactory呢?顺便说一句,我使用FOSUserBundle,不知道它是否与此有关

+0

这可能给你一个线索:你在哪里定义您的服务security.encoder_factory.generic – Mick 2013-04-04 18:24:04

+0

? – 2013-04-04 22:43:03

好的,我找到了答案。由于此服务被定义为身份验证提供程序,因此构造函数的第一个参数必须是由安全组件插入的用户提供程序。更改的参数的顺序没有诀窍:

services: 
    wsse.security.authentication.provider: 
     class: Fdi\CliperestBundle\Security\Authentication\Provider\WsseProvider 
     arguments: ['', %kernel.cache_dir%/security/nonces, @security.encoder_factory] 
+0

很高兴知道! – Mick 2013-04-05 08:25:02