ASP.NETでの利用
ASP.NET環境でのS2Container.NETの利用方法を説明します。
これまでは、.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.NET
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 Request { set; }のプロパティを定義します。
そうすると、S2Containerが自動的にリクエストを設定します。
また、S2HttpModuleをWeb.configに定義する必要があります。
同様にHttpResponse、HttpSessionもプロパティ(setアクセサ)を定義するだけで、自動バインディングすることが出来ます。
また、HttpRequest、HttpResponse、HttpSessionState、HttpApplicationをそれぞれrequest、
response、session、httpApplicationという名前のコンポーネントとしてアクセスできるようになります。
|