【发布时间】:2020-04-25 09:41:47
【问题描述】:
在 Laravel 的服务容器中,我可以同时绑定单例和实例。来自 Laravel doc:
绑定单例
单例方法将一个类或接口绑定到只应解析一次的容器中。一旦解决了单例绑定,相同的对象实例将在随后对容器的调用中返回:
$this->app->singleton('HelpSpot\API', function ($app) { return new HelpSpot\API($app->make('HttpClient')); });
绑定实例
您还可以使用实例方法将现有对象实例绑定到容器中。给定的实例将始终在对容器的后续调用中返回:
$api = new HelpSpot\API(new HttpClient); $this->app->instance('HelpSpot\API', $api);
Q1) 那么这两个概念有什么区别呢?我可以猜测,对于单例绑定,Laravel 在第一次请求时通过内部服务容器机制构建对象本身,然后在后续调用中提供它,而在实例绑定的情况下,服务容器被显式地赋予一个已经构建的对象,它提供给每个请求?
还是有其他解释?
Q2) 为什么我们需要两个绑定选项?
【问题讨论】:
标签: php laravel laravel-service-container