これまでは、.NET Frameworkアプリケーションで、明示的にS2Containerを作成していましたが、 Webアプリケーションの場合、誰がS2Containerを作成するのでしょうか。その目的のために次のクラスが用意されています。

 - Seasar.Framework.Container.Web.S2HttpModule

 S2HttpModuleを使うためにはWeb.configに次の項目を記述し、ASP.NETアプリケーションにS2HttpModuleを追加します。 source/Seasar/Seasar.Framework.Container/Web/Web.configに記述例もあります。

    <httpModules>
     <add name="S2HttpModule"
         type="Seasar.Framework.Container.Web.S2HttpModule, Seasar" />
    </httpModules>

 アプリケーション構成ファイル に定義するseasarセクションのconfigPath要素でメインとなるS2Container定義のパスを指定します。S2HttpModuleが起動した後は、 次のメソッドでS2Containerのインスタンスを取得することができます。

 - Seasar.Framework.Container.Factory.SingletonS2ContainerFactory#GetContainer()

 S2HttpModuleを使っている場合、HttpApplicationをhttpApplicationという名前のコンポーネントとして アクセスできるようになります。

 Global.asaxのApplication_StartメソッドでS2Containerの初期化、 Application_EndメソッドでS2Containerの破棄を行うように編集します。 SingletonS2ContainerFactoryクラスはSeasar.Framework.Container.Factory名前空間に存在します。

C#

protected void Application_Start(Object sender, EventArgs e)
{
    SingletonS2ContainerFactory.Init();
}

protected void Application_End(Object sender, EventArgs e)
{
    SingletonS2ContainerFactory.Destroy();
}

VB

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
   SingletonS2ContainerFactory.Init()
End Sub

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
   SingletonS2ContainerFactory.Destroy();
End Sub

 ASP.NETのWebフォームをS2Containerに登録すると、Webフォームに対してDependency Injection を行うことができます。Webフォームの登録は以下のように設定します。

    <component name="/Path/WebForm1.aspx" instance="outer" />

 name属性にはWebフォームへの要求の仮想パスを指定します。 instance属性にはouterを指定します。(S2ContainerでWebフォームのインスタンスを管理しないためです。)

 コンポーネントに対して、HttpRequestをバインディングすることが出来ます。 HttpRequest、HttpResponse、HttpSessionState、HttpApplicationは、それぞれrequest、 response、session、httpApplicationという名前のコンポーネントとして登録されています。 プロパティ・バインディングやコンストラクタ・バインディングで使ってください。自動バインディングは行われません。 また、S2HttpModuleをWeb.configに定義する必要があります。