深入理解 Laravel 服务容器:依赖注入的核心魔法

emer 发布于 阅读:109

在Laravel中,我们经常在构造函数中类型提示一个类,然后框架自动帮我们实例化它。这背后就是服务容器 (Service Container) 在工作。
服务容器的核心在于反射 (Reflection)。当我们需要一个 UserService 时,容器会检查它的构造函数需要什么参数。如果需要一个 Database 对象,容器会递归地去创建或获取 Database 实例,然后注入进去。
这就涉及到了控制反转 (IoC) 的概念:我们将对象的创建权从类内部移交给了外部容器。
代码示例:

// 传统方式
$userService = new UserService(new Database());

// 容器方式
$userService = $container->make(UserService::class);

理解这一点,你就理解了Laravel解耦的精髓。