Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔的自动化注射工作在哪里?_Php_Laravel_Dependency Injection - Fatal编程技术网

Php 拉威尔的自动化注射工作在哪里?

Php 拉威尔的自动化注射工作在哪里?,php,laravel,dependency-injection,Php,Laravel,Dependency Injection,也许这是一个愚蠢的问题,但在那个地方官方文件对我来说并不清楚。它说依赖注入是自动解决的,例如在控制器中。但在我的路由中,我将路由绑定到一个不从控制器类继承的类。和自动注射工程!这是否意味着解析每个路由都会自动使用ServiceContainer并解析依赖关系 在文档中,我们有: 或者,重要的是,您可以在容器解析的类的构造函数中“键入提示”依赖项,包括控制器、事件侦听器、中间件等。此外,您可以在排队作业的handle方法中键入提示依赖项。实际上,这就是容器应该解析大多数对象的方式 它还说“控制器、

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

在文档中,我们有:

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

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


我使用的是Laravel>5.8。谢谢。

依赖注入取决于调用函数/方法的方式,而不是函数本身

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

“由容器解析”表示您(或在本例中为Laravel路由器)正在通过容器调用它

要自动解析构造函数中的依赖项,可以使用:

这将为您提供一个已解决构造函数依赖关系的
MyClass
实例

要在可以使用的方法上使用DI,请执行以下操作:

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


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

app()->make(MyClass::class)
还将使用依赖项注入来解决依赖项谢谢你的回答。我知道如何使用服务容器手动解决依赖关系。但我想知道拉威尔什么时候默认使用它。与使用路由时一样,控制器类由容器解析。但是当我用“new”关键字创建一个实例时,它不是。我认为它与控制器类之后的继承有关。但它将通过容器来解析它,即使它是普通的PHP类。因此,我试图扩展我对Laravel及其流的工作原理的了解。DI不依赖于您正在解析其依赖关系的类,而只依赖于它的调用方式。它甚至可以用于简单的非类函数。Laravel会自动将DI添加到几乎所有您实例化的类或通过Laravel调用的方法中,而不是手动添加,例如routes(包括内联函数)。文档使用“和更多”,因为列出所有案例会很长。如果您在Laravel源代码中搜索,您会发现很多,包括路由、作业、播种机、迁移、验证等等。
$myThing = app()->make(MyClass::class);
$result = app()->call([$myThing, 'someMethod']);