2.4. Dependency Injection

次に、ActionコンポーネントにServiceコンポーネントをInjectしてみます。

次のようなActionクラスをclassesディレクトリに作成します。@S2Componentアノテーションでコンポーネント名を指定することができます。 また、Serviceクラスのインスタンスを受け取る$serviceプロパティを実装します。アクセス修飾子をpublicとするこで、プロパティインジェクションにより ServiceコンポーネントがInjectされます。indexActionメソッドでは、InjectされたServiceコンポーネントを使用して処理を行います。

<?php
/**
 * @S2Component('name' => 'act')
 */
class Action{
    public $service = null;
    public function indexAction() {
        $result = $this->service->add(1, 2);
    }
}

次のようなServiceクラスを作成します。

<?php
class Service {
    public function add($a, $b) {
        return $a + $b;
    }
}

ActionクラスやServiceクラスの読み込みはs2import関数で行います。 S2ApplicationContext::getメソッドでActionコンポーネントを取得すると、$serviceプロパティには、ServiceクラスのインスタンスがInjectされています。

<?php
require_once('S2Container.php');

s2import(dirname(__FILE__) . '/classes');
$action = s2get('act');
var_dump($action);

[注意]NOTE

このExampleは examples/quickstart/quickstart020.php にあります。



© Copyright The Seasar Foundation and the others 2005-2010, all rights reserved.