S2Container.NETでは、定義ファイル中に式言語として JScript.NET を利用しています。 定義ファイルの中で、文字列で記述した内容(式)を.NETのオブジェクトに変換することが出来ます。

  • 文字列は、"hoge"のように"で囲みます。
  • charは、'a'のように'で囲みます。
  • 数値は、123のようにそのまま記述します。
  • 論理値(System.Boolean)は、true,falseのようにそのまま記述します。
  • 列挙体(System.Enum)は、System.Data.DbType.Decimalのように列挙体の完全修飾名とメンバ名で記述します。(厳密には、JScript.NETの記法ではありません)
  • 型宣言(System.Type)は、Foo.BarのようにTypeの完全修飾名を記述します。(厳密には、JScript.NETの記法ではありません)
  • new DateTime()のように標準ライブラリ(mscorlib.dll)のクラスや構造体のコンストラクタを呼び出すことができます。(名前空間のSystemは省略して呼び出します)

 詳しくは、 JScript.NETのマニュアルを参照してください。

 定義ファイルで指定するJScript.NET式では、あらかじめ以下のオブジェクトが使用できるようになっています。

名前 説明
container Seasar.Framework.Container.
Impl.S2ContainerImpl
現在のdiconファイルを処理しているS2コンテナです
appSettings System.Collections.Specialized.
NameValueCollection
アプリケーション構成ファイルのappSettingsセクションの設定がセットされています (バージョン1.2.1以降)
.NET 2.0ではSystem.Configuration.ConfigurationManager.AppSettings の結果がセットされています
.NET 1.1ではSystem.Configuration.ConfigurationSettings.AppSettings の結果がセットされています
out System.Console.Out <initMethod>または<destroyMethod> のボディの中でのみ定義されています
err System.Console.Error <initMethod>または<destroyMethod> のボディの中でのみ定義されています

 定義ファイルで指定するJScript.NET式では、あらかじめ以下の変数が使用できるようになっています。

名前 説明
self <initMethod>または<destroyMethod> のボディの中でのみ定義されている変数です。 この変数は,現在のコンポーネント (<initMethod>または <destroyMethod>を囲む<component> 要素で表されているオブジェクト) を参照します

 例としてpropertyタグのボディでJScript.NETを使用してみます。

文字列

<property name="Message">"こんにちは"</property>

数値

<property name="Pi">3.14</property>

S2コンテナ

 S2コンテナにMessageと名前が付けられたHashtableが登録されており、 "Hello"というキーでセットされている値を取り出す例です。

<property name="Message">container.GetComponent("Message")["Hello"]</property>

アプリケーション構成ファイル

 アプリケーション構成ファイルに以下の設定がされており、 "message"というキーでセットされている値を取り出す例です。

<configuration>

    <appSettings>
        <add key="message" value="Hello" />
    </appSettings>
    
</configuration>

<property name="Message">appSettings['message']</property>