Expression Evaluation for DIContainer

seasar2は設定ファイル上の評価式をOGNL式から評価して、結果をインジェクションすることが可能だが、これが非常に強力な機能となっている。(と私は思う) となると、.NETのDIコンテナでも当然評価式をインジェクションしたいのだが、残念ながらOGNLの.NET(CLI)実装は存在していない。従って、s2dotnetは.NETのCodeProviderを利用してJavascriptのEvalによる評価式を使うようになっている訳だ。(OGNLの.NET実装は存在しているぞ!、という方は是非教えて欲しい) ならばSpring.NETは何を使っているのかと調べてみると、どうやらANTLRがベースのようだ。

The expression language is based on a grammar and uses ANTLR to construct the lexer and parser. Errors relating to bad syntax of the langage will be caught at this level of the language implementation. 〜
http://www.springframework.net/doc/reference/html/expressions.html

うーん、Spring.NETと同じってのもなんだし、もっと.NETの特徴を生かせるものはないのかと思っていたのだが、実は有力な候補があるではないか、と。

Windows PowerShell / Micosoft Technology Centers

少し前まで"Monad"とか"MSH"などと呼ばれていた、Windowsの次世代のシェル。.NET Frameworkの全てにアクセス出来て、.NETアプリケーションからホストすることも出来るらしい。
Windows PowerShellの式評価が.NETアプリケーションから出来るならば、例えばDateプロパティに現在の日付をインジェクションし、Sizeプロパティに100×100のSizeオブジェクトをインジェクションする場合、以下のように書けることだろう。

<property name="Date">[DateTime]::now</property>
<property name="Size">new-object System.Drawing.Size(100, 100)</property>

(XMLじゃ使えない文字も使えたりするんで、[CDATA]セクションで括る必要があるかも)
現時点では妄想でしか無いけれど(PowerShellもまだRC1だったり、WindowsXP以降限定だったりする)、OGNLの実装に時間がかかるのであればこれもありではないかと。