Home

Castle Stronghold

Table of contents

  • 1 Configuring the facility
  • 2 Global.asax
  • 3 Enabling the http module

Using it in a web application

If you make use of NHibernate's Lazy loading, then, for a web application, you must provide a session instance for the request lifetime. NHibernate facility provides a Http Module to do that.

The following sections illustrates the steps to make everything work as expected.

Configuring the facility

First of all, do not forget to use the attribute isWeb="true" on the facility configuration node:


<facilities>
    <facility id="nhibernate" isWeb="true">
        ...
    </facility>
</facilities>

This enables a different strategy to keep session instances.

Global.asax

You must make the your container available to the web application. The best place for it is the global.asax:


<%@ Application Inherits="YourApp.Web.MyGlobalApplication"  %>

MyGlobalApplication.cs:


namespace YourApp.Web
{
    using System;
    using System.Web;

    using Castle.Windsor;

    public class MyGlobalApplication : HttpApplication, IContainerAccessor
    {
        private static WebAppContainer container;

        public void Application_OnStart()
        {
            container = new WebAppContainer();
        }

        public void Application_OnEnd() 
        {
            container.Dispose();
        }

        public IWindsorContainer Container
        {
            get { return container; }
        }
    }
}

Enabling the http module

On your web.config, register the module SessionWebModule:


<configuration>
  <system.web>
    <httpModules>
      <add name="NHibernateSessionWebModule" 
        type="Castle.Facilities.NHibernateIntegration.Components.SessionWebModule, Castle.Facilities.NHibernateIntegration"/>
    </httpModules>
  </system.web>
</configuration>
Google
Search WWW Search castleproject.org