php - 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
那可能吗?我只想在服务提供者被解雇时进行控制。
提前致谢。
解决方案
我认为您不应该像这样传递服务提供者,而应该推迟服务提供者本身:
如果您的提供者仅在服务容器中注册绑定,您可以选择推迟其注册,直到实际需要其中一个已注册的绑定。延迟加载此类提供程序将提高应用程序的性能,因为它不是在每次请求时都从文件系统加载的。
Laravel 编译并存储了一个由延迟服务提供者提供的所有服务的列表,以及它的服务提供者类的名称。然后,只有当您尝试解析其中一项服务时,Laravel 才会加载服务提供者。
——引自Laravel 文档
在文档页面中,您还可以找到一个小示例以及如何推迟服务提供者
推荐阅读
- checkbox - 在 Loadrunner (Web HTTP/HTML) 中使用复选框?
- centos - 主从的 MariaDB 复制
- excel - 通过 Excel VBA 的 DB2 ODBC 连接
- listview - Viewcell 绑定上下文在 xamarin 表单中不起作用
- html - 如何在 Bootstrap 中使用网格系统对齐 Bootstrap 输入和标签?
- regex - 无法在 JMeter 中使用正则表达式提取器进行提取,但可以在 regex101 中进行提取
- python-3.x - 使用 tkinter 切换框架
- python - 导入 matplotlib.pyplot 时如何修复“UnicodeDecodeError:'ascii'编解码器无法解码字节 0xe0”?
- python - 使用 Python 将保存的“graphdata”加载回 redisgraph 实例时出现问题
- .net-core - 需要帮助来更新模型