Laravel DI在Facades Underlying Class中使用时不起作用


Laravel DI not working when using in Facades Underlying Class

这是我的门面类

<?php 
namespace App'Facades;
use Illuminate'Support'Facades'Facade;
class UserFacade extends Facade 
{
    protected static function getFacadeAccessor()
    {
        return 'user';
    }
}

这就是我绑定国际奥委会的方式(不确定我是否使用了正确的术语)

<?php
namespace App'Providers;

use Illuminate'Support'ServiceProvider;
use Illuminate'Support'Facades'App;
class RUserServiceProvider extends ServiceProvider
{
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        App::bind('user', function() {
            return new 'App'Http'Responses'RUser;
        });
    }
}

这是包含用户实体实际代码的底层类

<?php 
namespace App'Http'Responses;
use Illuminate'Database'Eloquent'ModelNotFoundException;
use App'Utils'TokenGenerator;
use App'Models'User;
use Validator;
use Hash;
class RUser
{
    protected $token_generator;
    public function __construct(TokenGenerator $token_generator)
    {
        $this->token_generator = $token_generator;
    }
    /**
     * Signup User
     * @param  Request $request 
     * @return array $response
     */
    public function signup($data)
    {
        $response = [];
        $access_token = $this->token_generator->generate(32);
        $user = User::create([
            'email' => $data->email,
            'password' => Hash::make($data->password),
            'company_name' => $data->company_name,
            'access_token' => $access_token
        ]);
        $response['user_id'] = $user->_id;
        $response['access_token'] = $user->access_token;
        return $response;
    }
}

这就是我在UserController 中使用RUser类的方式

<?php
namespace App'Http'Controllers;
use App'Http'Controllers'Controller;
use Illuminate'Http'Request;
use App'Models'User;
use Validator;
use FUser;
class UserController extends Controller
{
    /**
     * Signup User
     * @param  Request $request 
     * @return array $response
     */
    public function store(Request $request)
    {
        $this->request = $request;
        $payload = json_decode($this->request->getContent());
        if($this->validateJson('user.create', $payload)) {
            $validator = Validator::make((array) $payload, User::$rules);
            if ($validator->fails()) {
                $messages = $validator->errors();
                return $this->sendResponse(false, $messages);
            }
            $response = FUser::signup($payload);
            return $this->sendResponse(true, $response);
        }
    }
}

现在问题出在我的RUser类中,我希望Laravel自动注入TokenGenerator依赖项,就像它通常在Controller类中注入依赖项一样。但我不明白它为什么不这么做

这就是我得到的

RUser.php第15行出现ErrorException:参数1传递给App''Http''Response''RUser::__construct()必须是的实例App''Utils''TokenGenerator,未给定,在中调用/var/www/html/MyApp/app/Providers/RUserServiceProvider.php,第29行并定义

如果希望容器注入依赖项,则需要使用容器的make()方法,而不是本机new运算符:

App::bind('user', function($app) {
    return $app->make('App'Http'Responses'RUser');
});

可以更简洁地写为:

App::bind('user', 'App'Http'Responses'RUser');