我想知道你们之前是否有人遇到过同样的问题。目前,所有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构造函数添加类型(接口?)。