将一个服务注入另一个服务会导致错误:"必须是…的实例., none given


Injecting one service into another results in error: "must be an instance of ..., none given"

我创建了一个侦听器服务来侦听登录,以便我可以在登录后执行一些数据库操作。我正在尝试将另一个服务注入到我的侦听器中,但我得到一个致命错误:

可捕获致命错误:参数1传递给WX'ExchangeBundle'Service'SecurityListener::__construct()必须是WX'ExchangeBundle'Service'UserService的实例,none given

config.yml:

services:
    wxexchange_user_service:
        class:      WX'ExchangeBundle'Service'UserService
        arguments:  [@doctrine.orm.default_entity_manager]
    wxexchange_login_listener:
        class:      WX'ExchangeBundle'Service'SecurityListener
        arguements: [@wxexchange_user_service]
        tags:
            - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }

SecurityListener:

namespace WX'ExchangeBundle'Service;
use Symfony'Component'Security'Http'Event'InteractiveLoginEvent;
use WX'ExchangeBundle'Service'UserService;
class SecurityListener
{
    protected $userService;
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }
    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $lastLogin = new DateTime();
        $user = $event->getAuthenticationToken()->getUser();
        $this->userService->setLastLogin($user, $lastLogin);
    }
}

我已经尝试清除缓存,但没有解决问题。

您的config.yml有一个错别字:

arguements: [@wxexchange_user_service]
必须:

arguments: [@wxexchange_user_service]

(注意参数中的"e")

因此,SecurityListener在没有任何参数的情况下被实例化,但它需要一个类型为UserService的对象。