首页 > 解决方案 > Laravel - 当另一个类有自己的实例时触发服务提供者

问题描述

我想在另一个给定的类将拥有自己的对象时(并且仅当)触发我的一个服务提供者(及其绑定)。换句话说:我想通过依赖注入将服务提供者传递给对象,如下所示:

class ExampleController extends Controller {

    public function __construct(TestServiceProvider $testServiceProvider) {

        // here I want to fire register method of testServiceProvider

    }

但后来我得到了错误:

Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\ServiceProvider

那可能吗?我只想在服务提供者被解雇时进行控制。

提前致谢。

标签: phplaraveldependency-injectionbindingservice-provider

解决方案


我认为您不应该像这样传递服务提供者,而应该推迟服务提供者本身:

如果您的提供者仅在服务容器中注册绑定,您可以选择推迟其注册,直到实际需要其中一个已注册的绑定。延迟加载此类提供程序将提高应用程序的性能,因为它不是在每次请求时都从文件系统加载的。

Laravel 编译并存储了一个由延迟服务提供者提供的所有服务的列表,以及它的服务提供者类的名称。然后,只有当您尝试解析其中一项服务时,Laravel 才会加载服务提供者。

——引自Laravel 文档

文档页面中,您还可以找到一个小示例以及如何推迟服务提供者


推荐阅读