W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
幾乎你所有服務容器將與已注冊的服務提供者綁定,這些例子都在情境(context)使用容器做說明,如果應用程序其它地方需要容器實例,如工廠(factory),能以類型提示 Illuminate\Contracts\Container\Container 注入一個容器實例。另外,你可以使用 App facade 訪問容器。
在一個服務提供者內(nèi)部,你總是可以通過 $this->app 實例變量來訪問到容器。
在服務提供者里,總是通過 $this->app 實例變量使用容器。
服務容器注冊依賴有幾種方式,包括閉包回調(diào)和綁定實例的接口。首先,我們來探討閉包回調(diào)的方式。被注冊至容器的閉包解析器包含一個 key (通常用類名稱) 和一個有返回值的閉包:
$this->app->bind('FooBar', function($app)
{
return new FooBar($app['SomethingElse']);
});
有時候,你可能希望綁定到容器的對象只會被解析一次,之后的調(diào)用都返回相同的實例:
$this->app->singleton('FooBar', function($app)
{
return new FooBar($app['SomethingElse']);
});
你也可以使用 instance 方法,綁定一個已經(jīng)存在的實例到容器,接下來將總是返回該實例:
$fooBar = new FooBar(new SomethingElse);
$this->app->instance('FooBar', $fooBar);
從容器解析出實例有幾種方式。
一、可以使用 make 方法:
$fooBar = $this->app->make('FooBar');
二、你可以像「訪問數(shù)組」一樣對容器進行訪問,因為它實現(xiàn)了PHP的 ArrayAccess 接口:
$fooBar = $this->app['FooBar'];
最后,也是最重要的一點,你可以在構造函數(shù)中簡單地「類型指定(type-hint)」你所需要的依賴,包括在控制器、事件監(jiān)聽器、隊列任務,過濾器等等之中。容器將自動注入你所需的所有依賴:
<?php namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
use App\Users\Repository 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)
{
//
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: