我在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/

10-13 01:47