asphalt2-container(CSSを使用したFlex版DIコンテナ)に機能を追加しました。
init-methodの引数
前のリリースで、初期化後に呼び出ししたいメソッドを設定できるようにしましたが、そのメソッドの引数を取れる様にしました。
例えば、
public function init(bar:BarService,foo:FooService)
init-method:"init";
と記述すると、初期化後にinitメソッドを呼び出します。
この際、コンテナがメソッド引数の型を読み、その型を使って、コンテナからbeanを取り出して引数として渡してくれます。
プロパティ設定がめんどくさい場合は、この初期化メソッドに必要なbeanを列挙しておくと便利と思います。
initネームスペース
id:shot6さんから、ネームスペースでアノテーション的な設定出来るだろJK、と言われたので、作成しました。
例えば、
import asphalt2.factory.init; public class HogeImpl Implements Hoge{ init function hogeInit(foo:FooService,bar:BarService):void{ } }
というように、initネームスペースをつけたfunctionを用意しておき、設定ファイルに
Hoge{ bean-type:ClassReference("test.HogeImpl"); }
として、getBeanByType(Hoge) すると、beanインスタンス化後に、hogeInitを呼び出してくれます。
引数はinit-methodと同様、BeanFactoryから解決します。
使い方としては、Javaの@Injectや@Autowiredアノテーションのようなイメージです。
ほんとはメタデータのほうがかっこよかったのですが、コンパイラーの設定が必要だったり、まだ挙動不審なところがあるため、ひとまずネームスペースで作成しました。
BeanFactoryの戻り値の変更
getBean()の戻り値の宣言が「*」の場合、型キャストしなくてもいい事に気がついたため、BeanFactoryの定義を
function getBean(beanName:String):Object; function getBeanByType(clazz:Class):Object;
から
function getBean(beanName:String):*; function getBeanByType(clazz:Class):*;
に変更しました。
var hoge:Hoge = beanFactory.getBeanByType(Hoge);
のように使用できます。
ダウンロード
ダウンロードは以下から。
サイト http://code.google.com/p/asphalt2/
Featured Downloadsから、asphalt2container_v0_03_00.zipをダウンロードしてください。
これ自体がeclipseプロジェクトになっています。
ライブラリだけ使う場合は、bin/asphalt2container.swcをプロジェクトにいれ、パスを通してください。
SVNでチェックアウトしたい場合は、
http://asphalt2.googlecode.com/svn/trunk/asphalt2container-project/asphalt2container/
をチェックアウトしてください。
また
http://asphalt2.googlecode.com/svn/trunk/asphalt2container-project/asphalt2container-test/
がテストプロジェクトになっていますので、こちらももっていくといいと思います。