我使用StructureMap与NHibernate的,我想指示建立一个新的会话每次是必要的,且仅当配置工具。
我会尝试解释一些代码(这是一个控制台应用程序)。指示StructureMap创建一个新的会话(配置只有当)
我建立我的会话工厂这种方式(ConnDb是我的连接字符串):
For<ISessionFactory>()
.Singleton()
.Use(() => new NHSessionFactory(ConnDb, true).SessionFactory);
,这是我用它来建立一个会话代码:
For<ISession>()
.Singleton()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
一切正常,当预期我不处理会议,但我希望能够做到这样的事情:
using (session)
{
using (var tx = session.BeginTransaction())
{
// DO SOMETHING
tx.Commit();
}
}
using (session)
{
using (var tx = session.BeginTransaction())
{
// DO SOMETHING
tx.Commit();
}
}
我试图改变代码的会议,像这样:
For<ISession>()
.AlwaysUnique()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
,但我注意到,现在一个新的会话创建即使有一个活动。 在我的情况下,我引用了另一个组件(Rhino.Security),它使用服务定位器解析了ISession。