web应用如何获取container以避免连接池不回收的问题

Using it in a web application

If you make use of NHibernate's Lazy loading, then, for a web application, you must provide a session instance for the request lifetime. NHibernate facility provides a Http Module to do that.

The following sections illustrates the steps to make everything work as expected.

Configuring the facility

First of all, do not forget to use the attribute isWeb="true" on the facility configuration node:

<facilities>
    <facility id="nhibernate" isWeb="true">
        ...
    </facility>
</facilities>

This enables a different strategy to keep session instances.

Global.asax

You must make the your container available to the web application. The best place for it is the global.asax:

<%@ Application Inherits="YourApp.Web.MyGlobalApplication"  %>

MyGlobalApplication.cs:

namespace YourApp.Web
{
    using System;
    using System.Web;

    using Castle.Windsor;

    public class MyGlobalApplication : HttpApplication, IContainerAccessor
    {
        private static WebAppContainer container;

        public void Application_OnStart()
        {
            container = new WebAppContainer();
        }

        public void Application_OnEnd() 
        {
            container.Dispose();
        }

        public IWindsorContainer Container
        {
            get { return container; }
        }
    }
}

Enabling the http module

On your web.config, register the module SessionWebModule:

<configuration>
  <system.web>
    <httpModules>
      <add name="NHibernateSessionWebModule" 
        type="Castle.Facilities.NHibernateIntegration.Components.SessionWebModule, Castle.Facilities.NHibernateIntegration"/>
    </httpModules>
  </system.web>
</configuration>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值