私は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());
しかし、アクティブなセッションがある場合でも、新しいセッションが作成されることに気付きました。私の状況では、サービスロケーターで ISession を解決する別のコンポーネント (Rhino.Security) を参照しています。