【发布时间】:2016-09-16 13:47:18
【问题描述】:
我有一个会话工厂的实现是这样的:
public sealed class MySessionFactory
{
private static volatile MySessionFactory _instance;
private ISessionFactory _sessionFactory;
private static volatile object _locker = new object();
private MySessionFactory()
{
}
public MySessionFactory Intance
{
get
{
if (_instance != null)
return _instance;
lock (_locker)
{
if (_sessionFactory == null)
{
_instance = new MySessionFactory();
}
}
return _instance;
}
}
public ISession OpenSession()
{
if (_sessionFactory != null)
return _sessionFactory.OpenSession();
lock (_locker)
{
if (_sessionFactory == null)
{
var cfg = FluentNHibernate.Cfg.Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.PostgreSQLConfiguration.Standard.ConnectionString("connectionString").UseReflectionOptimizer())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsAssembly>());
_sessionFactory = cfg.BuildSessionFactory();
}
}
return _sessionFactory.OpenSession();
}
}
如果我删除静态变量 _instance 的 volatile,我会从这个更改中获得一些好处吗?或者这是一个很好的练习模式?
【问题讨论】:
-
如果您使用 Lazy
,您将使用更简洁的代码实现相同的目标,恕我直言。
标签: c# design-patterns nhibernate fluent-nhibernate sessionfactory