ServerConfig


たまにはFlexネタでも。

Flex+BlazeDSを使っている場合、services-config.xmlに書いた内容はswfのどこかに
埋め込まれている。これを上手く使うとFlex側でdestinationの文字列だけを仕様で決めて
RemoteObjectインスタンスを後から生成させて接続させることが出来る。


ポイントはmx.messaging.config.ServerConfigクラスのxmlプロパティ。
こいつが実はservices-config.xmlの内容をそのまま保持しているのでこいつを
うまいことゴニョゴニョしてやると、こんな感じでChannelSetを生成できるので
あとはLazyにRemoteObjectインスタンスをつくってどこかで管理しておけばよい。

	this.remotes=new Array();
	if (xml.toXMLString() == "<services/>")
	{
		return ;
	}
	var list:XMLList=xml.service.(@id == "remoting-service").destination;
	for each(var dest:XML in list)
	{
		var destination:String=dest.attribute("id").toString();
		var channelSet:ChannelSet=ServerConfig.getChannelSet(destination);
		var remote:RemoteObject=new RemoteObject(destination);
		remote.channelSet=channelSet;
		remotes[destination]=remote;
	}


あとはDIコンテナでdestinationのあて先でも管理してインジェクトさせれば
アプリケーションコード(Viewも含めて)ではどこに接続するかを全く知る必要がなくなる。
当然RemoteObjectもモックに置き換えれば、画面だけでテストも可能である。
ま、特に難しいことはない。