ASphalt2 Container v0_5_00 リリース

FxUGの発表に合わせて、ASphalt2 Container(CSSを使用したFlexDIコンテナ)に機能を追加しました。

定数定義の追加

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/
がテストプロジェクトになっていますので、こちらも見て頂くとよいかと思います。