在哪里 Laravel 项目中可以找到Service Container
。
所有Service Providers
都位于app/Providers
目录中的单个位置,但是在哪里可以找到Service Container
?
答案 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。