Created
April 28, 2013 21:58
-
-
Save cmendesce/5478573 to your computer and use it in GitHub Desktop.
HttpModule para controle do ISession do NHibernate usando o Unity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // -------------------------------------------------------------------------------------------------------------------- | |
| // 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