我在asp.net mvc应用程序中连接了NHibernate。
如果我不处理ISession,一切都会正常进行。但是,我读过您应该处理的信息,但是当我这样做时,会出现随机的“会话已关闭”异常。
我正在使用Windsor将ISession注入其他对象。
这是我当前的NHModule:
public class NHibernateHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
context.EndRequest += context_EndRequest;
}
static void context_EndRequest(object sender, EventArgs e)
{
CurrentSessionContext.Unbind(MvcApplication.SessionFactory);
}
static void context_BeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(MvcApplication.SessionFactory.OpenSession());
}
public void Dispose()
{
// do nothing
}
}
注册ISession:
container
.Register(Component.For<ISession>()
.UsingFactoryMethod(() => MvcApplication.SessionFactory.GetCurrentSession()).LifeStyle.Transient);
当我在模块上的解除绑定上添加“处置”时,会发生错误。由于我一直保持会话关闭错误,因此我认为这不是正确的方法,那么正确的方法是什么?
谢谢,
乔
最佳答案
Robert是正确的,Windsor会在释放依赖于该会话的组件时对其进行处置。
我建议您将Windsor的PerWebRequest生活方式用于ISession,而不要使用自己的HttpModule。
关于asp.net-mvc - 如何在ASP.NET MVC应用程序中处置NHibernate ISession,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2128847/