基本用法

广告位

绑定 几乎你所有服务容器将与已注册的服务提供者绑定,这些例子都在情境(context)使用容器做说明,如果应用…

绑定

几乎你所有服务容器将与已注册的服务提供者绑定,这些例子都在情境(context)使用容器做说明,如果应用程序其它地方需要容器实例,如工厂(factory),能以类型提示 IlluminateContractsContainerContainer 注入一个容器实例。另外,你可以使用 App facade 访问容器。

注册基本解析器

在一个服务提供者内部,你总是可以通过 $this->app 实例变量来访问到容器。

在服务提供者里,总是通过 $this->app 实例变量使用容器。

服务容器注册依赖有几种方式,包括闭包回调和绑定实例的接口。首先,我们来探讨闭包回调的方式。被注册至容器的闭包解析器包含一个 key (通常用类名称) 和一个有返回值的闭包:

$this->app->bind('FooBar', function($app) {     return new FooBar($app['SomethingElse']); });

注册一个单例

有时候,你可能希望绑定到容器的对象只会被解析一次,之后的调用都返回相同的实例:

$this->app->singleton('FooBar', function($app) {     return new FooBar($app['SomethingElse']); });

绑定一个已经存在的实例

你也可以使用 instance 方法,绑定一个已经存在的实例到容器,接下来将总是返回该实例:

$fooBar = new FooBar(new SomethingElse);  $this->app->instance('FooBar', $fooBar);

解析

从容器解析出实例有几种方式。
一、可以使用 make 方法:

$fooBar = $this->app->make('FooBar');

二、你可以像「访问数组」一样对容器进行访问,因为它实现了PHP的 ArrayAccess 接口:

$fooBar = $this->app['FooBar'];

最后,也是最重要的一点,你可以在构造函数中简单地「类型指定(type-hint)」你所需要的依赖,包括在控制器、事件监听器、队列任务,过滤器等等之中。容器将自动注入你所需的所有依赖:

<?php namespace AppHttpControllers;  use IlluminateRoutingController; use AppUsersRepository as UserRepository;  class UserController extends Controller {      /**      * The user repository instance.      */     protected $users;      /**      * Create a new controller instance.      *      * @param  UserRepository  $users      * @return void      */     public function __construct(UserRepository $users)     {         $this->users = $users;     }      /**      * Show the user with the given ID.      *      * @param  int  $id      * @return Response      */     public function show($id)     {         //     }  }

关于作者: 华为工程师芊芊

为您推荐