无法通过服务容器

时间:2016-06-23 03:57:34

标签: php laravel

我想知道你们之前是否有人遇到过同样的问题。目前,所有Illuminate管理器类都不包含构造函数中的应用程序类:

vendor/illuminate//auth/AuthManager.php:    public function __construct($app)
vendor/illuminate//auth/Passwords/PasswordBrokerManager.php:    public function __construct($app)
vendor/illuminate//broadcasting/BroadcastManager.php:    public function __construct($app)
vendor/illuminate//cache/CacheManager.php:    public function __construct($app)
vendor/illuminate//database/DatabaseManager.php:    public function __construct($app, ConnectionFactory $factory)
vendor/illuminate//filesystem/FilesystemManager.php:    public function __construct($app)
vendor/illuminate//queue/QueueManager.php:    public function __construct($app)
vendor/illuminate//support/Manager.php:    public function __construct($app)
vendor/illuminate//support/ServiceProvider.php:    public function __construct($app)

因此,不可能通过服务容器直接实例化它们--Laravel的SC无法仅根据变量名解析$ app。正常的引导过程手动实例化它们并注入应用程序容器。但有些情况,比如我的,我想在以后要求上课。

在我的应用程序laravel-aws-worker中,我需要一个控制器方法中的队列工作器实例。队列管理器依赖于队列管理器,队列管理器不可实例化 - 类型提示中断(抛出BindingResolutionException)。

我目前的解决方法是在启动期间手动绑定队列管理器:

    $this->app->singleton(QueueManager::class, function() {
        return new QueueManager($this->app);
    });

但是我想知道是否有更好的方法,或者是否有计划向Illuminate构造函数添加类型(接口?)。

0 个答案:

没有答案