4

デザインパターンを学ぶために使用している非常に小さなアプリがあります。

現在、依存性注入コンテナーを実装しようとしていますが、工場のように感じます。

誰かがコンテナの何が問題で、どこを改善できるかを説明できますか?

私が言ったように、それは非常に最小限であり、アプリにはいくつかのオブジェクトしか必要ありません:

class MyContainer
{
    public function getObjectA()
    {
        return new MyObjectA();
    }

    public function getObjectB()
    {
        $objectBArrayParam = array('arrparam1','arrparam2', 'arrparam3', 'arrparam4');
        $objectB = new MyObjectB('param1','param2', 'param3', 'param4', $objectBArrayParam);
        return $objectB;
    }

    public function getApplicationRunner()
    {
        $objectA = $this->getObjectA();
        $objectB = $this->getObjectB();

        $app = new ApplicationRunner($obejctA, $objectB);

        return $app;
    }

}
4

1 に答える 1

1

ファクトリは、依存性注入の静的タイプと見なすことができます。コンパイル時に引数を指定すると、結果のオブジェクト グラフは常に同じになります。

依存性注入ツールは、何らかのリフレクションを使用して、実行時に必要な引数を確認します。次に、その構成で必要なタイプを検索し、オブジェクト グラフを作成します。

単純な DI コンテナーを構築する場合は、型を登録するためのサポートと、実行時に必要な型をチェックするためのサポートを作成する必要があります。

何かのようなもの:

myDi.Register(<typeofIObectA>).To(<typeofobjectA>)
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>)

MyDi.Resolve(<typofApplicationRunner>)

DI コンテナーは、ApplicationRunner に 2 つの引数が必要であることを認識します。これらのタイプの構成をチェックし、オブジェクトを構築します。

于 2012-08-24T08:51:17.563 に答える