Skip to content

Instantly share code, notes, and snippets.

@cmendesce
Created April 28, 2013 21:58
Show Gist options
  • Select an option

  • Save cmendesce/5478573 to your computer and use it in GitHub Desktop.

Select an option

Save cmendesce/5478573 to your computer and use it in GitHub Desktop.
HttpModule para controle do ISession do NHibernate usando o Unity.
// --------------------------------------------------------------------------------------------------------------------
// Autor: rafaeluchoa
// Data de criação: 19/11/2012
// --------------------------------------------------------------------------------------------------------------------
using System;
using System.Web;
using Core.Data.NH;
using Microsoft.Practices.ServiceLocation;
using Microsoft.Practices.Unity;
using NHibernate;
namespace Core.Web.Modules
{
/// <summary>
/// Controle da Session do NHibernate.
/// </summary>
public class OpenSessionInViewModule : IHttpModule
{
/// <summary>
/// Adiciona os eventos de Begin e End Request para criação e dispose do ISession.
/// </summary>
/// <remarks>
/// Usa o ISessionFactory de dentro do UnityContainer.
/// UnityContainer deve está acessível do ServiceLocator.
/// </remarks>
/// <param name="context">contexto da aplicação</param>
public void Init(HttpApplication context)
{
context.BeginRequest += BeginRequest;
context.EndRequest += EndRequest;
}
/// <summary>
/// Veja <see cref="T:System.Web.IHttpModule"/>.
/// </summary>
public void Dispose()
{
// nenhuma liberação necessária.
}
/// <summary>
/// Cria um ISession e coloca dentro do Unity.
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">argumentos</param>
private static void BeginRequest(object sender, EventArgs e)
{
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
var sessionFactory = container.Resolve<ISessionFactory>();
var session = sessionFactory.OpenSession();
session.FlushMode = FlushMode.Never;
HybridSessionContext.Bind(session);
}
/// <summary>
/// Fecha o ISession.
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">argumentos</param>
private static void EndRequest(object sender, EventArgs e)
{
var session = HybridSessionContext.Unbind();
if (session != null)
{
session.Close();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment