1

(DIに関する記事への非常に(!)便利なリンクと基本的な例の後)「最も単純な使用例(2つのクラス、一方が他方を消費する)」の章で、Zend Framework 2チュートリアル「依存性注入の学習」はコンストラクターの例を提供しますインジェクション。これは大丈夫です。次に、セッター注入の例を示します。しかし、それは完全ではありません (例の呼び出し / 使用部分が欠落しています)。インターフェイス注入注釈ベースの注入の例がありません。

(1) セッター注入の例の欠落部分はどのように見えますか? さらに、チュートリアルのクラスを使用して、(2) インターフェイス インジェクションと (3) アノテーション ベースのインジェクションの例を書いてもらえますか?

前もって感謝します!

4

1 に答える 1

4

おそらく、Ralph Schindler の Zend\Di examplesZend\Diを参照してください。さまざまなユース ケースがすべて網羅されています。

Zend\Di のドキュメントの作業も開始しましたが、他の作業で忙しすぎて完成できませんでした (最終的にはまた取り上げる予定です)。

セッター注入 (強制):

class Foo 
{
    public $bar;

    public function setBar(Bar $bar)
    {
        $this->bar = $bar;
    }
}

class Bar 
{
}

$di  = new Zend\Di\Di;
$cfg = new Zend\Di\Configuration(array(
    'definition' => array(
        'class' => array(
            'Foo' => array(
                // forcing setBar to be called
                'setBar' => array('required' => true)
            )
        )
    )
)));

$foo = $di->get('Foo');

var_dump($foo->bar); // contains an instance of Bar

セッター注入 (指定されたパラメーターから):

class Foo 
{
    public $bar;

    public function setBar($bar)
    {
        $this->bar = $bar;
    }
}

$di     = new Zend\Di\Di;
$config = new Zend\Di\Configuration(array(
    'instance' => array(                
        'Foo' => array(
            // letting Zend\Di find out there's a $bar to inject where possible
            'parameters' => array('bar' => 'baz'),
        )
    )
)));
$config->configure($di);

$foo = $di->get('Foo');

var_dump($foo->bar); // 'baz'

インターフェース注入。イントロスペクション戦略で定義されているように、インターフェイスZend\Diから注入メソッドを検出します。*Aware*

interface BarAwareInterface
{
    public function setBar(Bar $bar);
}

class Foo implements BarAwareInterface
{
    public $bar;

    public function setBar(Bar $bar)
    {
        $this->bar = $bar;
    }
}

class Bar 
{
}


$di  = new Zend\Di\Di;
$foo = $di->get('Foo');

var_dump($foo->bar); // contains an instance of Bar

アノテーション注入。Zend\Di注釈を介して注入方法を発見します。

class Foo 
{
    public $bar;

    /**
     * @Di\Inject()
     */
    public function setBar(Bar $bar)
    {
        $this->bar = $bar;
    }
}

class Bar 
{
}


$di  = new Zend\Di\Di;
$di
    ->definitions()
    ->getIntrospectionStrategy()
    ->setUseAnnotations(true);

$foo = $di->get('Foo');

var_dump($foo->bar); // contains an instance of Bar
于 2013-02-28T14:14:44.620 に答える