1

私は依存性注入とDIコンテナについて読んでいます。しかし、私はこの概念に頭を悩ませることはできません。

DIコンテナは、「コントローラー」が「ローダー」に依存し、「コントローラー」の前に「ローダー」をロードすることをどのように認識しますか?

私の見方では、依存関係を追跡するために何らかの構成ファイルが必要になるということです。そうであれば、次のように書くほうが簡単ではありません。

// Controller
function __construct() {
    $this->load = new \Framework\Core\Loader;
}
4

2 に答える 2

2

はい、DICは、いくつかの構成ファイルで、またはファクトリクロージャーをスタックするか、ソースコードに注釈を付けることにより、事前に構成する必要があります。

はい、ctorでインスタンスを作成する方が簡単ですが、依存関係を注入しなくなったため、DIのすべての利点が失われます。

また、DIを行うためにDICは必要ないことに注意してください。DIは、コンストラクター、セッター、またはusingメソッドを介してコードに依存性を注入する行為です。

于 2012-06-29T21:31:25.387 に答える
0

ゴードンが言ったことを完了するためだけに:

はい、DICは、いくつかの構成ファイルで、またはファクトリクロージャーをスタックするか、ソースコードに注釈を付けることにより、事前に構成する必要があります。

ここでの最も簡単で迅速な方法は注釈です。次の例を確認してください。

class Loader {
    //...
}

class MyController {
    /**
     * @Inject
     * @var Loader
     */
    private $loader;

    public indexAction() {
        // You can use $this->loader
    }

}

この例では、依存関係(ローダー)がアノテーションを介して挿入されています。コードは明確で読みやすく、構成ファイルを作成する必要はありません。これはIMOの最も簡単なソリューションです。

このアプローチに興味がある場合は、アノテーションを操作する依存性注入フレームワークであるPHP-DIの例を取り上げました(私が取り組んでいます)。

于 2012-10-07T08:53:44.613 に答える