public class SessionManager:IDisposable
{
private static readonly SessionManager instance = new SessionManager();
private ISession m_currentSession;
private ISessionFactory m_currentSessionFactory;
private SessionManager()
{ }
public static SessionManager Instance
{
get
{
return instance;
}
}
/// <summary>
///
/// </summary>
/// <param name="sessionFactoryConfigPath"></param>
/// <returns></returns>
/// <exception cref=""></exception>
private ISessionFactory GetSessionFactory(string sessionFactoryConfigPath)
{
//判断SessionFactory配置文件
if (string.IsNullOrEmpty(sessionFactoryConfigPath))
{
throw new ArgumentNullException("配置文件路径错误。");
}
//创建SessionFactory
if (m_currentSessionFactory == null)
{
try
{
Configuration config = new Configuration();
config.Configure(sessionFactoryConfigPath);
m_currentSessionFactory = config.BuildSessionFactory();
}
catch (Exception ex)
{
throw new PersistenceException("创建SessionFactory出错。", ex);
}
if (m_currentSessionFactory == null)
{
throw new PersistenceException("创建SessionFactory出错。");
}
}
return m_currentSessionFactory;
}
/// <summary>
///
/// </summary>
/// <param name="sessionFactoryConfigPath"></param>
/// <returns></returns>
public ISession GetSession(string sessionFactoryConfigPath)
{
return GetSession(sessionFactoryConfigPath, null);
}
/// <summary>
///
/// </summary>
/// <param name="sessionFactoryConfigPath"></param>
/// <param name="interceptor"></param>
/// <returns></returns>
public ISession GetSession(string sessionFactoryConfigPath, IInterceptor interceptor)
{
if (m_currentSession == null)
{
if (interceptor == null)
{
m_currentSession =
GetSessionFactory(sessionFactoryConfigPath).OpenSession();
}
else
{
m_currentSession =
GetSessionFactory(sessionFactoryConfigPath).OpenSession(interceptor);
}
}
else if (!m_currentSession.IsOpen)
{
m_currentSession = GetSessionFactory(sessionFactoryConfigPath).OpenSession();
}
return m_currentSession;
}
public void CloseSession()
{
if (m_currentSession != null && m_currentSession.IsOpen)
{
m_currentSession.Flush();
m_currentSession.Dispose();
m_currentSession.Close();
}
}
#region IDisposable 成员
public void Dispose()
{
CloseSession();
}
#endregion
}