Laravel 是根据bootstrap/cache/services.php文件去决定如何注册 ServiceProvider的,而是否延迟加载则取决于第一次解析这个Provider文件时里面的protected $defer等的配置。
如果一开始设置的是延迟加载,即protected $defer = true;,那即便后来把这个属性设置为false或是注释掉,那也不会改变bootstrap/cache/services.php文件里面的设置,可能导致相应的服务提供者未能在你需要时提前注册好(因为设置了延时加载,那个Provider文件还没运行)报未找到相应类的错误。
解决方法是执行php artisan clear-compiled,清除旧的bootstrap/cache/services.php文件。
实验中设置了延迟加载后,App::make()实例一个对象时报错了,是还没注册的原因。很抓狂,有哪位大佬能说说这延迟加载正确使用方式吗?