asp.net mvc アプリに NHibernate を接続しました。
ISession を破棄しなければ、すべて正常に動作します。ただし、破棄する必要があることを読みましたが、破棄すると、「セッションが閉じられました」というランダムな例外が発生します。
Windsor を使用して、ISession を他のオブジェクトに注入しています。
これが私の現在のNHModuleです:
public class NHibernateHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
context.EndRequest += context_EndRequest;
}
static void context_EndRequest(object sender, EventArgs e)
{
CurrentSessionContext.Unbind(MvcApplication.SessionFactory);
}
static void context_BeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(MvcApplication.SessionFactory.OpenSession());
}
public void Dispose()
{
// do nothing
}
}
ISession の登録:
container
.Register(Component.For<ISession>()
.UsingFactoryMethod(() => MvcApplication.SessionFactory.GetCurrentSession()).LifeStyle.Transient);
モジュールのアンバインドで Dispose を追加すると、エラーが発生します。セッションが閉じられているというエラーが発生し続けるので、これは正しい方法ではないと思いますが、正しい方法は何ですか?
ありがとう、ジョー