2

依存性注入コンテナーのアイデアに苦労しています。

説明する方法がわかりませんが、いくつかの例を試してみます。

class foo
{
    public function __construct(\Somenamespace\Bar $bar, $x)
    {

    }
}

DIC は「x」が何であるかをどのように知るのでしょうか?

さらに進んでバーのクラスを見てみましょう。DIC は反射を問題なく作成できます。

namespace \Somenamespace;
class bar
{
    public function __construct(\SomethingElse\Tap $tap, $y)
    {

    }   
}

バーはタップを必要としており、タップは DIC によっても検出される可能性がありますが、どのようにして 'y' を認識しているのでしょうか?

そして、タップを作成する場合。

namespace\SomethingElse;
class tap
{
    public function __construct($amountOfTaps)
    {

    }
}

DIC は、タップの量やその他の変数をどのように知るのでしょうか?

編集:

ヒント付きの型がインターフェイスか抽象クラスかについても同じ質問があります。DIC は、何を作成する必要があるかをどのように判断しますか?

4

2 に答える 2

0

私の最善の策は、PHP の IoC コンテナーがReflectionを使用することです (.NET や Java の IoC コンテナーと同様)。型をリフレクションし、そのコンストラクターのパラメーターのパラメーター名を取得する方法を示す例を次に示します。

$reflector = new ReflectionClass('SomeClass'); 

$parameters = $reflector->getConstructor()->getParameters();

foreach ($parameters as $parameter) {
    echo $parameter->name;
}
于 2013-07-03T19:10:15.020 に答える