YIIは、デフォルトでは、主にそのコンテナベースのアプローチを通じて、依存関係の注入を強くサポートします。基本的な実装には、サードパーティのDIコンテナを明示的に使用する必要はありません。 YIIの組み込み依存関係注入メカニズムは、クラス特性とコンストラクターインジェクションの概念を活用します。これがあなたがそれを実装する方法です:
1。依存関係を定義します。クラスでは、依存関係をタイプのヒントを持つプロパティとして宣言します。これにより、YIIはタイプに基づいて依存関係を自動的に解決できます。
<code class="php">class MyController extends \yii\web\Controller { public $userService; public function __construct($id, $module, UserService $userService) { parent::__construct($id, $module); $this->userService = $userService; } public function actionIndex() { $users = $this->userService->getAllUsers(); // ... rest of your code } }</code>
2。依存関係の登録(必要に応じて):依存関係(例のUserService
など)が組み込みのYIIコンポーネントではない場合、または自動的に登録されている場合は、アプリケーションの構成内で登録する必要があります。これは通常、アプリケーションの構成ファイル( config/web.php
またはconfig/console.php
)で実行されます。
<code class="php">return [ // ... other configurations 'components' => [ 'userService' => [ 'class' => 'app\services\UserService', ], ], ];</code>
この構成は、YIIに、必要に応じてapp\services\UserService
のインスタンスを作成するように指示します。
3.依存関係の使用: MyController
は、直接作成する必要なく、注入されたuserService
オブジェクトを使用できます。 Yiiのコンテナは、インスタンス化と噴射を自動的に処理します。
いくつかのベストプラクティスは、YIIの依存噴射の有効性と保守性を高めます。
依存関係の注入は、いくつかの方法で保守性とテスト責任の両方を大幅に改善します。
Yiiには組み込みのDIコンテナがありますが、Pimple、Symfonyの依存噴射コンポーネントなどのサードパーティコンテナを統合できます。ただし、これには通常、より多くの構成が必要であり、Yiiのコンテナで特定のニーズを満たさない限り、Yiiの組み込みシステムよりも大きな利点を提供しない場合があります。
通常、サードパーティのコンテナを統合するには、次のものが含まれます。
一般に、Yiiの組み込みDI機能から始めることをお勧めします。 Yiiのコンテナ(特定のスコープ、怠zyな荷重など)によって提供されていない高度な機能が必要であり、統合の複雑さの増加を処理するために準備されているなど、特定の理由がある場合にのみ、サードパーティのコンテナを検討してください。多くの場合、利点はほとんどのYIIプロジェクトに追加された複雑さを上回りません。
以上がYIIで依存関係注射を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。