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>