2

DI コンテナーの使用方法を理解しようとしています。

A、B、および C のように定義された 3 つのクラスがあるとします。

class A {}

class B
{
    private $a;

    public function set_a(A $a)
    {
        $this->a = $a;
    }
}

class C
{
    private $b;

    public function set_b(B $b)
    {
        $this->b = $b;
    }
}

今、私が実際に得ていないのは、index.php に書くことになっているものです。コンテナをインスタンス化してからオブジェクトに渡して、オブジェクトがコンテナに依存するようになるため、それを使用できるようにすることは良いことではないと読みました。しかし、それでは、 index.php に次のようなものを書かなければならないということですか?

$container = new Container();
$container->a = function($ctnr) {
    return new A();
}
$container->b = function($ctnr) {
    $b = new B();
    $b->set_a($ctnr->a);
    return $b;
}
$container->b = function($ctnr) {
    $c = new C();
    $c->set_b($ctnr->b);
    return $c;
}

$c = $container->c;

これは行く方法ですか?

4

2 に答える 2

0

コンセプトは理解できたと思います。

依存性注入の基本的な考え方は、オブジェクトのインスタンス化をフレームワークに委任することです。

独自のコンテナーを作成することもできますが、フレームワークを使用することをお勧めします。

ほとんどのフレームワークでは、注入するタイプと場所を決定できます。

symfonyは非常に優れたコンテナーです。

于 2012-04-14T22:29:50.163 に答える
0

コンテナーに関する全体的な考え方は、依存関係を解決し、オブジェクトの初期化を実行することです。

私なら: コンテナを選択します。楽しみのために、いくつかのアプリケーションで使用されているものを書きました。( https://github.com/niclaslindberg/webx-ioc/ )。インターフェイスを使用して依存関係を設計します。(クラスが他のインターフェースに依存することのみを許可します)。クラス/インスタンスを登録し、コンテナーにすべての面倒な作業を任せます。

于 2015-11-10T06:40:49.910 に答える