<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="container-di">
  <title>Dependency Injection</title>

  <subtitle>－依存性の注入－</subtitle>

  <section>
    <title>はじめに</title>

    <para>本章では，Dependency Injection (依存性の注入，以下DI) の利用方法について説明します．</para>
  </section>

  <section>
    <title>Dependency Injection概要</title>

    <para>DIとは，コンポーネントが他のコンポーネントに依存している場合に，その依存物 (他のコンポーネント) を外部 (S2コンテナ)
    から注入することです． DIを利用すると，コンポーネントが他のコンポーネントに直接依存することを避けることができます．</para>

    <para>図</para>

    <para></para>

    <para>図</para>

    <para></para>
  </section>

  <section>
    <title>Dependency Injectionのタイプ</title>

    <para>Dependency Injectionは，あるコンポーネントが依存する (必要とする) 他のコンポーネントをコンテナから渡されます．
    その際の方法として，次のものがあります．</para>

    <itemizedlist>
      <listitem>
        <para>コンストラクタ・インジェクション</para>
      </listitem>

      <listitem>
        <para>セッター・メソッド</para>
      </listitem>

      <listitem>
        <para>メソッド・インジェクション</para>
      </listitem>
    </itemizedlist>

    <para></para>

    <section>
      <title>コンストラクタ・インジェクション</title>

      <para>コンストラクタ・インジェクションでは，コンストラクタを通じて依存するコンポーネントが設定されます．</para>
    </section>

    <section>
      <title>セッター・インジェクション</title>

      <para>セッター・インジェクションでは，プロパティのセッター・メソッドを通じて依存するコンポーネントが設定されます．</para>
    </section>

    <section>
      <title>メソッド・インジェクション</title>

      <para>メソッド・インジェクションでは，任意のメソッドを通じて依存するコンポーネントが設定されます．</para>

      <para>メソッド・インジェクション</para>
    </section>

    <section>
      <title>フィールド・インジェクション</title>

      <para>フィールド・インジェクションでは，任意のフィールドに直接コンポーネントが設定されます．
      フィールド・インジェクションはdiconファイルで指定することはできません．
      フィールド・インジェクションを使用するにはアノテーションを指定します．</para>
    </section>
  </section>

  <section>
    <title>ライフサイクルとDI</title>

    <para>図が欲しい</para>

    <itemizedlist>
      <listitem>
        <para>コンストラクタ・インジェクション</para>
      </listitem>

      <listitem>
        <para>セッター・インジェクション／フィールド・インジェクション</para>
      </listitem>

      <listitem>
        <para>initメソッド・インジェクション</para>
      </listitem>

      <listitem>
        <para></para>
      </listitem>

      <listitem>
        <para>destroyメソッド・インジェクション</para>
      </listitem>
    </itemizedlist>
  </section>

  <section>
    <title>自動バインディング</title>

    <para></para>

    <section>
      <title></title>

      <para></para>
    </section>

    <section>
      <title>バインディング・タイプ</title>

      <para></para>

      <variablelist>
        <varlistentry>
          <term><literal>must</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>should</literal> (デフォルト)</term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>may</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>none</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>

    <section>
      <title>依存コンポーネントの解決</title>

      <para></para>

      <itemizedlist>
        <listitem>
          <para>型</para>
        </listitem>

        <listitem>
          <para>名前</para>
        </listitem>

        <listitem>
          <para></para>
        </listitem>
      </itemizedlist>
    </section>

    <section>
      <title>自動バインディング・モード</title>

      <para></para>

      <variablelist>
        <varlistentry>
          <term><literal>auto</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>constructor</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>property</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>none</literal></term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term><literal>semiauto</literal> (Version: 2.4～)</term>

          <listitem>
            <para></para>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>
  </section>

  <section>
    <title>特殊なコンポーネント</title>

    <para></para>

    <section>
      <title>S2Container</title>

      <para></para>
    </section>

    <section>
      <title>ComponentDef</title>

      <para></para>
    </section>
  </section>

  <section>
    <title>外部バインディング</title>

    <para></para>
  </section>

  <section>
    <title>まとめ</title>

    <para></para>
  </section>
</chapter>