2012-02-16 15 views
10

私はDIコンセプトを使用していましたが、今は依存性注入コンテナ(DIC)を使用し始めています。 1つのことは私には明らかではありませんが。依存性注入コンテナ(PHP)のインスタンスを保持する方法

私のDICでは、ConfigオブジェクトとRequestオブジェクトを保持しています。私は、要求スコープ内のこれらのオブジェクト(同じインスタンスがこのコンテナから要求するたびに使用される)が同じままであることを理解しています。しかし、これはDICの同じインスタンスを再利用する場合にのみ発生します。

私はどのようにDICのarroundを渡す必要がありますか?私はそれを私のルータクラスで使用したいとします、それを私のルータクラスのコンストラクタに渡す必要がありますか?しかし、Routerクラスは別のクラスで作成され、既にこのDICオブジェクトを持っている必要があります。

このDICのシングルトンを作成する必要はありますか?

答えて

7

シングルトンルートには行ってはいけません。 DICがあなたに与えるすべての利点を効果的に引き出します。通常、コンテナはコンストラクタで渡すか、適用可能な場合はメソッドパラメータとして渡します。

はい、これは、アプリケーションの周りにコンテナオブジェクトを渡すために余分な努力を払う必要があります。その結果、これらのクラスがこのオブジェクトに依存していることがうまく反映されます。

+1

私のアプリケーションのブートストラップにDICを作成し、それを必要な場所に渡すことをお勧めします。良いアプローチのようですが、確かに私はそのために余分な努力をする必要があります。 (私のクラスも非常にテスト可能です) – jayv

+0

アプリケーション全体を通して使用されているコンテナの場合は、かなり良い考えかもしれません。リソース/オブジェクトを効果的にカプセル化します。そうしないと、グローバル変数またはシングルトンとして公開する必要があります。限られた使用範囲で「ローカル」DIコンテナを使用することもできます。それらは必要とされる範囲で内在的に作成されるべきです。 – Mchl

+0

制限された範囲の使い方の短い実用的な例を教えてもらえますか? – jayv