Asp.net mvc 应用程序启动中的NHibernate初始化

Asp.net mvc 应用程序启动中的NHibernate初始化,asp.net-mvc,s#arp-architecture,Asp.net Mvc,S#arp Architecture,我正在使用Asp.NETMVC和NHibernate 下面显示了一些我的Global.asax文件: public override void Init() { base.Init(); // The WebSessionStorage must be created during the Init() to tie in HttpApplication events webSessionStorage = new WebSession

我正在使用Asp.NETMVC和NHibernate

下面显示了一些我的Global.asax文件:

 public override void Init()
    {
        base.Init();

        // The WebSessionStorage must be created during the Init() to tie in HttpApplication events
        webSessionStorage = new WebSessionStorage(this);

    }


    /// <summary>
    /// Due to issues on IIS7, the NHibernate initialization cannot reside in Init() but
    /// must only be called once.  Consequently, we invoke a thread-safe singleton class to 
    /// ensure it's only initialized once.
    /// </summary>
    protected void Application_BeginRequest(object sender, EventArgs e)
    {

        //the following code sets up the NHibernate Session Factory
        NHibernateInitializer.Instance().InitializeNHibernateOnce(
            () => InitializeNHibernateSession());
    }
public override void Init()
{
base.Init();
//必须在Init()期间创建WebSessionStorage,以连接HttpApplication事件
webSessionStorage=新的webSessionStorage(此);
}
/// 
///由于IIS7上的问题,NHibernate初始化无法驻留在Init()中,但
///只能调用一次。因此,我们调用一个线程安全的单例类来
///确保它只初始化一次。
/// 
受保护的无效应用程序\u BeginRequest(对象发送方,事件参数e)
{
//以下代码设置NHibernate会话工厂
NHibernateInitializer.Instance().InitializeNHibernateOnce(
()=>InitializeNHibernateSession());
}
无论何时AppPool回收,下一个请求都需要一段时间才能执行,因为它必须等待NHibernateSessionFactory进行初始化。之后,一切都很好,直到下一个应用程序池回收

现在,我想将初始化移到Application_Start方法中,这样当池回收时,重启会在下一个请求到来之前完成繁重的工作。然而,来自S#arp体系结构的“由于IIS7问题”的评论让我意识到这并不是那么简单

我确实发现了一篇文章:这篇文章建议将IIS设置为使用“经典模式”来修复它——这是唯一的方法吗