おそらく、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