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

时间:2018-08-30 03:39:07

标签: laravel

在哪里 Laravel 项目中可以找到Service Container

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

1 个答案:

答案 0 :(得分:3)

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

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

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

$this->app->bind('App\Contracts\PriceCalculator', 'App\Shop\MyPriceCalculator');

那么这个黑匣子总是对您可用,因此,如果您需要PriceCalculator对象(例如,购物车控制器中的某个位置来计算某些订单的价格),则可以代替:

$calculator = new \App\Shop\MyPriceCalculator;

询问服务容器以使您成为合适的容器:

$calculator = app()->make('App\Contracts\PriceCalculator');

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

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

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

您可以阅读官方文档here