我试图使用我的路线服务提供商提供的服务。
我已经尝试过在任何控制器中通常做的事情
use App\Services\EncryptionService;
class RouteServiceProvider extends ServiceProvider{
..
public function __construct(EncryptionService $encryption) {
$this->encryption = $encryption;
} // end function constructor
..
}
我得到的错误是
ErrorException in RouteServiceProvider.php line 32:
Argument 1 passed to App\Providers\RouteServiceProvider::__construct() must be an instance of App\Services\EncryptionService, instance of Illuminate\Foundation\Application given, called in /Users/Dale/Desktop/work/0.2/bootstrap/cache/compiled.php on line 7335 and defined
如果我不能使用构造函数,我如何访问我在服务中使用的方法?
答案 0 :(得分:1)
传递给服务提供者的参数是应用程序本身。您可以使用App::make()
来解决依赖关系:
class RouteServiceProvider extends ServiceProvider{
..
public function __construct($app) {
$this->encryption = $app->make('App\Services\EncryptionService');
} // end function constructor
..
}
您只能在容器解析的类中使用依赖项,请在此处阅读:
答案 1 :(得分:0)
这段代码看起来不错。问题似乎是您创建使用服务的位置。因此,请查看代码中的代码:
$myRouteServiceProvider = new RouteServiceProvider($myparameter);
$ myparameter here必须是以下类型的对象:App \ Services \ EncryptionService
答案 2 :(得分:0)
您可以使用boot
方法。
来自Laravel的引文,https://laravel.com/docs/master/providers#the-boot-method
您可以为服务提供商的启动方法键入提示依赖项。服务容器将自动注入您需要的任何依赖项:
use App\Services\EncryptionService;
class RouteServiceProvider extends ServiceProvider{
public function boot(Router $router, EncryptionService $encryption) {
parent::boot($router);
//you can use your EncryptionService
}
}