DOCTYPEは、XML宣言の次に指定します。下記のように指定してください。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="hello" class="Seasar.Examples.Reference.Injection.HelloConstructorInjection"> <arg>"Hello World!"</arg> </component> <component name="ConstructorInjection" class="Seasar.Examples.Reference.Injection.HelloConstructorInjectionClient" /> </components>
ルートのタグになります。
名前空間を指定することができます。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components namespace="hoge"> ... </components>
分割されたS2Containerの定義を取り込む場合に使います。
定義ファイルのパスを指定することができます。定義ファイルのパスには、埋め込まれたリソースもしくはファイルシステムで指定することができます。
埋め込まれたリソースを使用する場合は、定義ファイルの名前空間を含む完全限定名です。セパレータは、/です。 定義ファイルのビルドアクションプロパティは、埋め込まれたりソースに設定します。
C#プロジェクトの場合は、フォルダを作成すると名前空間が作成されます。VB.NETプロジェクトの場合は、フォルダを作成しても名前空間は作成されません。 例えば、プロジェクトフォルダ/Sample/Logic/aaa.diconとすると、C#プロジェクトの場合は、既定の名前空間/Sample/Logic/aaa.diconになります。 VB.NETの場合は、既定の名前空間/aaa.diconになります。
ファイルシステムを使用する場合は、一般的なファイルパスを指定します。絶対パス、相対パスを指定できます。
埋め込まれたリソース、ファイルシステムの定義ファイルを混在させることもできます。 同じパスで埋め込まれたリソース、ファイルシステムの両方でヒットする場合は、ファイルシステムの定義ファイルが優先されます。 componentタグの前に記述する必要があります。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <include path="aaa/bbb/ccc.dicon" /> </components>
コンポーネントを定義します。
クラスの完全限定名を指定します。 ボディで、JScript.NET式を使って コンポーネントを指定した場合は、class属性を省略することができます。 JScript.NET式を使った場合にclass属性を指定すると、型チェックを行います。
名前を指定することもできます。.NETの識別子として使えるものにします。 詳しくは、コンポーネントの取得を参照してください。
S2Containerがどのようにコンポーネントのインスタンスを管理するのかを指定することができます。 singleton(デフォルト)、prototype、outer、request、sessionを指定することができます。 詳しくは、インスタンス管理を参照してください。
S2Containerがコンポーネントの依存関係をどのように解決するのかを指定できます。 auto(デフォルト)、constructor、property、noneを指定することができます。 詳しくは、自動バインディングを参照してください。
componentタグの子タグとして使った場合は、コンストラクタの引数になります。 記述した順番でコンストラクタに渡されます。 initMethodタグ、 destroyMethodタグの子タグとして使った場合は、メソッドの引数になります。 記述した順番でメソッドに渡されます。 引数として渡される実際の値は、ボディでJScript.NET式を使うか、 子タグでcomponentタグを使います。
componentタグの子タグとして使います。 プロパティとして設定される実際の値は、ボディでJScript.NET式を使うか、 子タグでcomponentタグを使います。
プロパティ名を指定します。
componentsタグ、componentタグ、 argタグ、propertyタグの子タグとして使います。 メタデータの値は、ボディでJScript.NET式を使うか、 子タグでcomponentタグを使います。
メタ名を指定します。
componentタグの子タグとして使います。 引数は、子タグでargタグを使います。 name属性を書かずにJScript.NET式を使って、コンポーネントのメソッドを呼び出すこともできます。 initMethodタグが定義されているコンポーネント自身を表すself、Console.Outを表すout、 Console.Errorを表すerrがinitMethodタグ内だけで有効なオブジェクトとして使えます。
メソッド名を指定します。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component class="System.Collections.Hashtable"> <initMethod name="Add"> <arg>"aaa"</arg> <arg>111</arg> </initMethod> <initMethod>self.Add("aaa", 111)</initMethod> <initMethod>out.WriteLine("Hello")</initMethod> </component> </components>
componentsタグ、componentタグ、 argタグ、propertyタグの子タグとしてdescriptionタグを使うことができます。 自由に説明を記述できます。