扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年10月2日
关键字:
在本页阅读全文(共2页)
SessionFactory.cs
using System;
using System.Runtime.Remoting;
using NHibernate;
namespace Commercial.Jwsoft.Framework.Persistence.SessionManage
{
/// <summary>
/// 功能:管理多个实现ISessionManage接口的类工厂,根据读取的要加载的类名称信息,进行动态的创建Session
/// </summary>
public class SessionFactory
{
private static ISession session = null;
private static ISessionManage sessionManage = null;
static SessionFactory()
{
Init();
}
/// <summary>
/// 获取实现NHibernate.ISession接口的Session实例
/// </summary>
/// <returns>返回实现NHibernate.ISession接口的类实例</returns>
public static ISession GetSession()
{
session = sessionManage.Get();
if (session == null)
{
session = NHibernateSession.GetNHibernateSession();
sessionManage.Set(session);
}
return session;
}
private static void Init()
{
System.Reflection.Assembly ass = System.Reflection.Assembly.Load(SessionConfigManage.AssemblyName);
sessionManage = (ISessionManage)ass.CreateInstance(SessionConfigManage.SessionSourceItemName);
}
}
}
----------------------------------------------
NHibernateSession.cs
using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace Commercial.Jwsoft.Framework.Persistence.SessionManage
{
/// <summary>
/// 功能:加载嵌入资源(Xml配置文件),打开一个SessionFactory,获取NHibernate的Session实例
/// </summary>
public class NHibernateSession
{
private static Configuration cfg = null;
private static ISessionFactory sessionFactory = null;
static NHibernateSession()
{
cfg = new Configuration().Configure();
sessionFactory = cfg.BuildSessionFactory();
}
/// <summary>
/// 获取NHibernate的Session实例
/// </summary>
/// <returns></returns>
public static ISession GetNHibernateSession()
{
return sessionFactory.OpenSession();
}
}
}
---------------------------------------------
SessionConfigManage.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
namespace Commercial.Jwsoft.Framework.Persistence.SessionManage
{
/// <summary>
/// 功能:根据类库的应用环境不同(Windows应用还是Web应用),动态创建类实例
/// 日期:2006-08-24
/// 作者:郭少宏
/// </summary>
public class SessionConfigManage
{
private const string SESSION_ITEM_NAME = "SessionItemName";
private static object _locker = new object();
private static string _sessionItemName = string.Empty;
private static string _assemblyName = string.Empty;
static SessionConfigManage()
{
string configString = ConfigurationManager.AppSettings[SESSION_ITEM_NAME];
string[] arr = configString.Split(',');
_sessionItemName = arr[0];
_assemblyName = arr[1];
}
/// <summary>
/// 获取配置文件中名为SESSION_ITEM_NAME配置节的信息,记录的要加载的SessionManage的类全称
/// </summary>
/// <returns>实现ISessionManage接口的类的名称</returns>
public static string SessionSourceItemName
{
get
{
lock (_locker)
{
return _sessionItemName;
}
}
}
/// <summary>
/// 获取配置文件中名为SESSION_ITEM_NAME配置节的信息,记录的要加载的SessionManage的类全称
/// </summary>
/// <returns>实现ISessionManage接口的类的程序集名称</returns>
public static string AssemblyName
{
get
{
lock (_locker)
{
return _assemblyName;
}
}
}
}
}
在Web.Config文件中的配置节如下:
<appSettings>
<!---->
<!--在Web应用中加载的获取Session的类名称-->
<add key="SessionItemName" value="Commercial.Jwsoft.Framework.Persistence.SessionManage.WebNHSession,JWFramework"/>
<!--在Windows应用中加载的获取Session的类名称-->
<!--<add key="SessionItemName" value="Commercial.Jwsoft.Framework.Persistence.SessionManage.WinFormNHSession,JWFramework"/>-->
</appSettings>
在Global.asax中添加如下代码:
/// <summary>
/// 当用户断开请求时用来关闭用户请求的Session的连接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Session_End(object sender, EventArgs e)
{
NHibernate.ISession session = Commercial.Jwsoft.Framework.Persistence.SessionManage.SessionFactory.GetSession();
if (session != null)
{
session.Close();
}
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者