public function login($username, $password)
    {
        /**
         * @todo Invert this so that the `new User` constructor login relies on this service
         */
        $className = $this->userClass;
        $user = new $className($username, $password);

        if ($user->isError()) {
            // Throw an appropriate acception matching the exceptional state
            $this->handleUserError($user->getError());
        }

        return $user;
    }