3

現在、Zend Framework 2 でモジュールを作成しています。

これに関するドキュメントを見つけるのにかなり苦労していますが、可能であることは知っています。

依存性注入を介してセットアップしたい階層に 3 つのクラスがあります。これらのクラスを呼び出しましょう。クラスA、クラスB、クラスC。

ClassA には ClassB インスタンスの配列が含まれ、ClassB には ClassC インスタンスの配列が含まれます。ClassB の各インスタンスは、異なるパラメーターを使用してインスタンス化する必要があります。同じことが ClassC にも当てはまります。3 つのクラスすべてのパラメーターは、コンストラクターを介して渡されます (これは、必要に応じてセッターで処理することもできます)。

<?php
class ClassA {
    protected $arrClassBInstances = array();

    public function __construct( $arrClassBInstances ) {
         $this->arrClassBInstances = $arrClassBInstances;
    }
}

class ClassB {
    protected $arrClassCInstances = array();
    protected $someOtherParam = "";

    public function __construct( $arrClassCInstances, $someOtherParam ) {
         $this->arrClassBInstances = $arrClassCInstances;
         $this->someOtherParam = $someOtherParam;

    }
}

class ClassC {
    protected $someParam = "";

    public function __construct( $someParam ) {
         $this->someParam = $someParam;
    }
}

したがって、それらは私の質問の2つの部分です。まず、異なるパラメーターが注入された同じクラスの複数のインスタンスを構成するにはどうすればよいですか? たとえば、それぞれ独自の ClassC インスタンスのサブセットを持つ ClassB の複数のインスタンス。ZF2 DiC には何らかのエイリアスが必要です。

次に、再構成依存関係の配列をクラスに挿入するにはどうすればよいですか。たとえば、ClassB インスタンスの配列を ClassA に挿入するにはどうすればよいですか?

可能であれば、DiC を直接使用する例と、module.config.php の DI セクションでこれを実現する例を提供してください。

4

3 に答える 3

0

ドキュメントから、これはうまくいくはずだと思います:

// $event instance of \Zend\Mvc\MvcEvent
$di = $event->getTarget()->getLocator();
$paramsForA = array(
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>1)),
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>2)),
    ))),
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>3)),
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>4)),
    ))),
);
$classA = $di->get('qualified_namespaces_or_di_alias_for_a', array('arrClassBInstances'=>$paramsForA));

DI aliasまたはfull qualified namespaceの最初のパラメーターとして使用します$di->get()

于 2012-04-17T05:04:41.810 に答える
0

私はちょうどこの主題に関する記事を書きました。私は個人的に Di クラスまたは DiC を使用していませんが、IoCC として何を使用するかに関係なく、特にパート 2 で、概念が質問に直接適用できることがわかると思います。 http://zendblog.shinymayhem.com/2012/09/using-servicemanager-as-inversion-of.html

于 2012-09-28T21:55:24.033 に答える
0

DI 構成ファイルを使用してそれを行う方法の 2 つの例を次に示します。見る:

https://github.com/ralphschindler/Zend_DI-Examples/blob/master/example-08.php

https://github.com/ralphschindler/Zend_DI-Examples/blob/master/example-15.php

于 2012-05-08T03:32:34.817 に答える