在 Laravel 项目中哪里可以找到服务容器?

A K*_*A K 0 laravel

Service ContainerLaravel项目中哪里可以找到 .

所有这些都Service Providers位于app/Providers目录中的单个位置,但是在哪里可以找到Service Container

d3j*_*3jn 5

服务容器是 Laravel 框架的核心组件,您可以直接使用它,您不应该像服务提供商那样创建自己的服务容器。

您可以将服务容器想象为一个关联数组,您可以在其中存储依赖项(服务)以及如何解决它们的逻辑。然后,您可以使用服务容器根据提供的逻辑为您提供所需的内容。

更容易想象服务容器是一个始终可用的黑匣子。您的应用程序首先在其中注册(放置)某些规则(例如,如果有人想要一个实现PriceCalculator接口的对象,则给他一个类的对象MyPriceCalculator)。这是通过register()您的服务提供商的方法完成的:

$this->app->bind('App\Contracts\PriceCalculator', 'App\Shop\MyPriceCalculator');
Run Code Online (Sandbox Code Playgroud)

然后这个黑匣子始终可供您使用,因此如果您需要PriceCalculator对象(例如,在购物车控制器中的某个位置来计算某个订单的价格),您现在可以不用执行以下操作:

$calculator = new \App\Shop\MyPriceCalculator;
Run Code Online (Sandbox Code Playgroud)

请求服务容器为您提供合适的容器:

$calculator = app()->make('App\Contracts\PriceCalculator');
Run Code Online (Sandbox Code Playgroud)

请注意我们如何要求服务容器为我们提供接口的实现,并反过来为我们提供新的App\Shop\MyPriceCalculator对象,因为这就是我们之前定义(注册)App\Contracts\PriceCalculator服务的方式。

使用服务容器是管理应用程序的所有依赖项的好方法,因为您的代码将使用抽象,并且这些抽象的解析方式将始终在一个地方定义(这意味着如果您以后想更改某些内容,则更容易维护) )。

如果您是 Laravel 的新手,我建议您暂时跳过服务容器,因为它是一个更高级的主题,您需要更好地理解依赖注入模式才能完全掌握并正确使用它。

您可以在此处阅读官方文档。