FxUGの発表に合わせて、ASphalt2 Container(CSSを使用したFlex版DIコンテナ)に機能を追加しました。
定数定義の追加
CSSで記述した値を、定数として取得できるようにしました。
例えば
public class MyServerActionImpl implements MyServerAction{ public var url:String; public var retry:int; }
のようなクラスがあり、プロパティに値をセットする場合に、CSSに
MyServerAction{ bean-type:ClassReference("sample.MyServerActionImpl"); url:"http://hoge.co.jp"; retry:100; }
と書くのではなく、
/*定数定義 例えばサーバに関する設定*/ .serverconf{ url:"http://hoge.co.jp"; retry:100; } /**定数の参照*/ MyServerAction{ bean-type:ClassReference("sample.MyServerActionImpl"); url:"${serverconf.url}"; retry:"${serverconf.retry}"; }
のように記述することで、プロパティにセットする定数への参照を記述することが出来ます。
設定するデータを1箇所に固めたい場合などに利用できます。
bindメソッド
CSSではなく、プログラム上から設定を行うためのbind()メソッドを、CSSBeanFactoryに追加しました。
Google Guiceと同じような使い方になります。
var factory:CSSBeanFactory = CSSBeanFactory.getInstance(); //IHogeインターフェースに対して、IHogeImplをバインド factory.bind(IHoge).toType(IHogeImpl); //IFooインターフェースに対して、IFooImplをprototypeスコープでバインド factory.bind(IFoo).toType(IFooImpl).inPrototypeScope(); //"bar"という名前で、IBarImplをバインド factory.bind("bar").toType(IBarImpl); //bean取得 IHogeImplのインスタンスが取得できる var hoge:IHoge = factory.getBeanByType(IHoge); //型でbindしても、内部的にはクラス名からパッケージを抜いた //文字列で持っているため、以下のいずれでもIFooImplが取得できる var fooByType:IFoo = factory.getBeanByType(IFoo); var fooByName:IFoo = factory.getBean("IFoo");
プログラム上からDIしたい場合に利用できます。
なお、この方法の場合細かいプロパティ指定が出来ないため、DIされる側の方にメタデータを付与します。
Injectメタデータ
DIされる側のクラスに、以下のようにメタデータを付与します。
public class MyServerImpl implements MyServer{ //IHogeの実装クラスをコンテナから探してDI [Inject] public var hoge:IHoge; //"serverconf.url"という名前のデータをコンテナから探してDI [Inject("serverconf.url")] public var url:String; //"serverconf.retry"という名前のデータをコンテナから探してDI 見つからなくてもエラーにしない [Inject(name="serverconf.retry",required=false)] public var retry:int; }
Injectメタデータは、値をDIしてほしいプロパティに付与するメタデータです。
メタデータの引数がない場合、プロパティの型を使ってDIするデータを探します。
引数あり、もしくはname="名前"で宣言した場合は、その名前でデータを探します。
またrequiredで、値が必須かどうかを宣言できます(デフォルトはtrueです)
bindConstantメソッド
CSSの定数定義と同じく、プログラム上から定数を定義するためにbindConstant()メソッドを利用できるようにしました。
var factory:CSSBeanFactory = CSSBeanFactory.getInstance(); factory.bindConstant("serverconf.url","http://hoge.co.jp"); factory.bindConstant("serverconf.retry",100);
この記述で、上記のCSS定数設定と同じ設定が出来ます。
使い方説明
使い方を参照してください。
また上のエントリーの資料も参考になるかと思います。
ダウンロード
ダウンロードは以下から。
サイト http://code.google.com/p/asphalt2/
Featured Downloadsから、asphalt2container_v0_05_00.zipをダウンロードしてください。
これ自体がeclipseプロジェクトになっています。
ライブラリだけ使う場合は、bin/asphalt2container.swcをプロジェクトのlibsに入れてください。
SVNでチェックアウトしたい場合は、
http://asphalt2.googlecode.com/svn/trunk/asphalt2container-project/asphalt2container/
をチェックアウトしてください。
また
http://asphalt2.googlecode.com/svn/trunk/asphalt2container-project/asphalt2container-test/
がテストプロジェクトになっていますので、こちらも見て頂くとよいかと思います。