阅读(571)
赞(9)
Laravel 8 延迟提供者
2021-06-23 10:57:22 更新
如果你的服务提供者 只 在 服务容器 中注册,可以选择延迟加载该绑定直到注册绑定的服务真的需要时再加载,延迟加载这样的一个提供者将会提升应用的性能,因为它不会在每次请求时都从文件系统加载。
Laravel 编译并保存延迟服务提供者提供的所有服务的列表,以及其服务提供者类的名称。因此,只有当你在尝试解析其中一项服务时,Laravel 才会加载服务提供者。
要延迟加载提供者,需要实现 \Illuminate\Contracts\Support\DeferrableProvider
接口并置一个 provides
方法。这个 provides
方法返回该提供者注册的服务容器绑定:
<?php
namespace App\Providers;
use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Support\ServiceProvider;
use Riak\Connection;
class RiakServiceProvider extends ServiceProvider implements DeferrableProvider
{
/**
* 注册服务提供者。
*
* @return void
*/
public function register()
{
$this->app->singleton(Connection::class, function ($app) {
return new Connection($app['config']['riak']);
});
}
/**
* 获取由提供者提供的服务。
*
* @return array
*/
public function provides()
{
return [Connection::class];
}
}