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