コンテナと依存関係の注入
コンテナと依存性注入(コンテナ)
依存性注入はコンテナを介して実装され、自動導入が実現できます。参照クラスの依存関係、およびクラスの依存オブジェクトの自動ロード
依存関係注入とは、コンストラクターを介したクラス依存関係の自動注入を指します:
<?php namespace app\index\controller; use app\index\model\User; class Index { protected $user; // 通过依赖注入方式,实现User实例的自动注入到当前对象中 public function __construct(User $user) { $this->user = $user; } public function hello() { return 'Hello,' . $this->user->name . '!'; } }
依存関係注入のオブジェクト パラメーターのサポート複数、そして順序は関係ありません。
バインディング
依存関係が挿入されたクラスはコンテナーによって均一に管理され、ほとんどの場合、自動的にバインドされてインスタンス化されます。ただし、いつでも手動でクラスをコンテナにバインドでき (通常はサービス クラスの register メソッドで)、複数のバインド メソッドがサポートされています。
クラス識別のバインド
迅速な呼び出しのために、識別 (一意) を既存のクラス ライブラリにバインドできます。
// 绑定类库标识 $this->app->bind('cache', 'think\Cache');
またはヘルパー関数を使用します
// 绑定类库标识 bind('cache', 'think\Cache');
バインドされたクラス識別子は、(競合がない限り) 自分で定義できます。
バインディング クロージャ
クロージャをコンテナにバインドできます
bind('sayHello', function ($name) { return 'hello,' . $name; });
バインディング インスタンス
クラスのインスタンスを直接バインドすることもできます
$cache = new think\Cache; // 绑定类实例 bind('cache', $cache);
インターフェイス実装にバインド
インターフェイス クラスを使用した依存関係注入の場合、どの特定のインスタンスをシステムに伝える必要があります。インジェクションに使用するインターフェイス実装クラス。これを使用すると、特定のクラスをインターフェイスにバインドできます
// 绑定think\LoggerInterface接口实现到think\Log bind('think\LoggerInterface','think\Log');
依存関係注入のタイプとしてインターフェイスを使用します
<?php namespace app\index\controller; use think\LoggerInterface; class Index { public function hello(LoggerInterface $log) { $log->record('hello,world!'); } }
バッチ バインディング決定
実際のアプリケーション開発プロセスでは、手動でバインドする必要はありません。アプリケーション ディレクトリの下に Provider.php ファイルを定義するだけで (配列を返します)、システムはクラス ライブラリを自動的にバインドします。バッチのコンテナ。中央。
return [ 'route' => \think\Route::class, 'session' => \think\Session::class, 'url' => \think\Url::class, ];
バインディング識別子は呼び出されるときに大文字と小文字が区別されます。システムにはすでにバインディング コア共通クラス ライブラリが組み込まれているため、それらを繰り返しバインドする必要はありません。
システムの組み込み-コンテナにバインドされたクラス ライブラリに include
システム クラス ライブラリ | コンテナ バインディング識別子 |
---|---|
think\App | app |
think\Cache | キャッシュ |
think\Config | config |
think\Cookie | cookie |
think\Console | コンソール |
db | |
debug | |
env | |
event | |
http | |
lang | #think\Log |
think\ミドルウェア | |
think\Request | |
think\Response | |
think\ファイルシステム | |
think\Route | |
think\Session | |
think\Validate | |
think\View | |