0

私は現在、依存性注入を管理するためにPimpleと同様のクラスを使用しています。たとえば、構成クラスに依存しているデータベース接続のインスタンスを取得する場合は、次のようにします。

$DI = new DIContainer;

$DI->Config =
     $DI->share = function($c){
           return new Config;
     };

$DI->Database =
     $DI->share = function($c){

          $cfg = $c->Config;

          $host = $cfg->getDbHost();
          $username = $cfg->getDbUsername();
          $password = $cfg->getDbPassword();
          $name = $cfg->getDbName();

          return new \mysqli($host, $username, $password, $name);
     };

簡単に言うと、$ DI-> Configは常に構成クラスの同じインスタンスを返し、$ DI-> Databaseは、Configオブジェクト自体ではなく、オブジェクトのいくつかのプロパティ(host、ユーザーなど)。

もちろん、これは実行時にコンテナーをセットアップする必要があることを意味し、Zend Framework 2の依存性注入コンテナー(定義リストを渡すことができる)に移行することを考えていました。

ただし、Zend \ Di \ Diには、オブジェクト自体ではなく、オブジェクトのプロパティを挿入する方法の例が見つかりません。これは可能ですか?何か例を知っていますか?

4

1 に答える 1

0

私はにきびに精通していないので、あなたが何を求めているのか完全にはわかりませんが、ここにいくつかの一般的な情報があります....

Zend Di はService Locatorとして機能します。つまり、オブジェクト インスタンスのレジストリを維持し、要求された各オブジェクトの同じインスタンスを常に返します。したがって、特別なことをしなくても、Zend Di が常に同じデータベース接続 (など) を返すようにすることが簡単にできるはずです。これがデフォルトの動作です。

オブジェクトのプロパティ/属性の注入は、与えられた例で行っていることではありません。むしろ、この例は「コンストラクター注入」のように見えます:mysqliオブジェクトの構築時にパラメーター/引数を注入します。コンストラクター インジェクションは、Zend Di によって十分にサポートされています。

Zend Di の作成者である Ralph Schindler は、Zend Di の使用例の完全なリポジトリを持っています。ここでは、やりたいことのほとんどの参考資料を見つけることができるはずです。

具体的には、おそらくあなたが探しているのは、構成パラメーターを含むコンストラクター注入を利用するRalph の例 hereです。

そうは言っても、多くの ZF2 開発者は Zend Di よりも Zend ServiceManager を好みます。ServiceManager は ZF2 のデフォルトであり、Zend Di のように Service Locator としても機能しますが、その使用法は Pimple にはるかに似ています。にきびから移行している場合は、ServiceManager に慣れている可能性が高くなります。

于 2013-02-06T15:39:35.647 に答える