我有一个配置类,用于基础中的第一个用户访问,如果 firebird 或 oracle 使用它来放置设置和服务几乎是必需的,设置保存在加密文件中,每次我启动我的应用程序时检查这些设置是,到目前为止,一切都很好。
private static Settings _data;
public static Settings Data
{
get
{
if (_data == null)
{
_data = new Settings();
if (_data.FilePath != null && !Directory.Exists(Path.GetDirectoryName(_data.FilePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(_data.FilePath));
}
_data.Load(_data.FilePath);
}
return _data;
}
}
但是我对所有请求都使用了一个会话,我决定改变存在同步问题的问题,然后决定实现每个请求的会话,但是每次开始我的应用程序时都会创建一个会话并且需要创建会话在单例类中创建的服务数据。一种实现方法是在 Global.asax 中创建我的会话之前进行验证。
protected void Application_BeginRequest()
{
if (!Settings.Data.Valid())
throw new SingletonException();
var session = SessionManager.SessionFactory.OpenSession();
if (!session.Transaction.IsActive)
session.BeginTransaction(IsolationLevel.ReadCommitted);
CurrentSessionContext.Bind(session);
}
这是我的会话管理器。
private SessionManager()
{
if (Settings.Data.SGDB == 1)
{
sessionFactory = Fluently.Configure()
.Database(new FirebirdConfiguration().ConnectionString(GetConnectionString())
.ShowSql())
.Mappings(GetMappings())
.ExposeConfiguration(c => c.SetProperty(Environment.CurrentSessionContextClass, "web"))
.BuildSessionFactory();
}
if (Settings.Data.SGDB == 0)
{
sessionFactory = Fluently.Configure()
.Database(OracleConfiguration
.Oracle10
.ConnectionString(GetConnectionString())
.ShowSql()
.Driver<OracleManagedDataClientDriver>()
.Dialect<Oracle10gDialect>()
)
.Mappings(GetMappings())
.ExposeConfiguration(c => c.SetProperty(Environment.CurrentSessionContextClass, "web"))
.BuildSessionFactory();
}
}
但是,对于它激怒的每个请求都进行验证,这对我来说是对单例类进行验证的更好方法吗?