首页 > 解决方案 > Laravel 中的自动化注入到底在哪里工作?

问题描述

也许这是一个愚蠢的问题,但官方文档在那个地方对我来说并不清楚。它说依赖注入是自动解决的,例如在控制器中。但是在我的路由中,我将我的路由绑定到一个不从 Controller 类继承的类。和自动注射工作!这是否意味着解析每条路由都会自动使用 ServiceContainer 并解析依赖关系?

在文档中,我们有:

或者,重要的是,您可以在由容器解析的类的构造函数中“类型提示”依赖关系,包括控制器、事件侦听器、中间件等。此外,您可以在排队作业的处理方法中键入提示依赖项。实际上,这就是容器应该如何解析大多数对象的方式。

它说“控制器、事件侦听器、中间件等等”。你能告诉我其他地方,自动注射有效吗?

我正在使用 Laravel >5.8。谢谢你。

标签: phplaraveldependency-injection

解决方案


依赖注入取决于你如何调用函数/方法,而不是函数本身。

[...]您可以在由容器解析的类的构造函数中“类型提示”依赖项

“由容器解析”意味着您(或者在这种情况下是 Laravel 路由器)正在通过容器调用它。

要自动解决构造函数中的依赖关系,您可以使用app()->make()

$myThing = app()->make(MyClass::class);

这将为您提供一个MyClass解析了构造函数依赖项的实例。

要在方法上使用 DI,您可以使用app()->call()

$result = app()->call([$myThing, 'someMethod']);

一般来说,Laravel 几乎在所有地方都使用 DI。我一直认为它可以工作,如果不能,您可以简单地手动解决依赖关系。

注意:这 是基于 Laravel 5.4.26 但大多数(如果不是全部)信息应该仍然是正确的。


推荐阅读