DI——Dependency InjectionDependency Injection
IoC——制御の反転
上記の 2 つの概念を理解するには、次の質問を理解する必要があります。
1. 参加者は誰ですか?回答: 通常、3 つのパーティがあり、1 つはオブジェクト、1 つは IoC/DI コンテナ、もう 1 つはオブジェクトの外部リソースです。名詞についてもう一度説明します。オブジェクトは通常の Java オブジェクトを指します。IoC/DI コンテナは、単に IoC/DI 機能を実装するために使用されるフレームワーク プログラムを指します。オブジェクトの外部リソースは必要ですが、取得されます。オブジェクトの外部からのリソースは、オブジェクトが必要とする他のオブジェクトや、オブジェクトが必要とするファイル リソースなど、総称してリソースと呼ばれます。
2. 依存:誰が誰に依存しているのか?なぜ依存関係があるのでしょうか?
回答: 特定のオブジェクトは IoC/DI コンテナに依存します。プロジェクトでは、さまざまなクラス間にさまざまな関係があり、すべてが完全に独立していることは不可能であり、依存関係が形成されます。従来の開発では、他のクラスを使用するときに直接呼び出しますが、これは強い結合を形成するため、避けるべきです。依存関係の注入では、コンテナーを借用して依存オブジェクトを転送し、分離を実現します。
3. 注射:誰が誰に注射するのか?いったい何が注入されるのでしょうか?
答え: 必要な外部リソースをコンテナを通じてオブジェクトに注入します
4. 制御の逆転: 誰が誰を制御するのか?何を制御しますか?なぜ逆転と呼ばれるのでしょうか?
回答: IoC/DI のコンテナ制御オブジェクトは主にオブジェクト インスタンスの作成を制御します。反転は正の方向と相対的なものですが、何が正の方向とみなされるのでしょうか?通常の状況でアプリケーションを考えてみましょう。A の中で C を使用したい場合はどうしますか?もちろん、C のオブジェクトは直接作成されます。つまり、必要な外部リソース C がクラス A で能動的に取得されます。この状況を順方向と呼びます。では、逆とは何でしょうか?つまり、クラス A は積極的に C を取得するのではなく、IoC/DI コンテナが C のインスタンスを取得するのを受動的に待ち、それを逆にクラス A に注入します。
5. 依存関係の注入と制御の反転は同じ概念ですか?
答え: 上記からわかるように、依存関係の注入はアプリケーションの観点から完全に説明できます。アプリケーションは、制御の反転中に必要な外部リソースを作成して注入します。コンテナの観点から この角度は説明しており、完全に説明すると、コンテナはアプリケーションを制御し、コンテナはアプリケーションに必要な外部リソースをアプリケーションに逆に注入します。
例を通して依存関係注入の実装方法をいくつか見てみましょう:
1.コンストラクターインジェクション
リーリー
2.セッター注入リーリー
上記 2 つのメソッドのコードは非常に明確ですが、多くの依存関係を注入する必要がある場合、多くの行を追加することになり、管理がより困難になります。
より良い解決策は、すべての依存関係のコンテナーとしてクラスを作成することです。このクラスでは、必要な依存関係を保存、作成、取得、検索できます。 リーリー
この時点で、ブックのインスタンスを取得したい場合は、 $newone = Ioc::makebook(); を実行するだけです
上記はコンテナの具体的な例です。 登録や取得にはレジストリを使用する方が良いです。 リーリー
次の方法で登録して注入できるようになりましたリーリー
参考: http://www.4wei.cn/archives/1002316
http://www.bkjia.com/PHPjc/1125521.html