В моем приложении asp.net mvc подключено NHibernate.
Все работает нормально, если я НЕ распоряжаюсь ISession. Однако я прочитал, что вы должны избавиться, но когда я это сделаю, я получаю случайные исключения «Сессия закрыта».
Я впрыскиваю 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 к unbind в модуле. Так как я продолжаю получать сообщение о том, что сессия закрыта, я предполагаю, что это неправильный способ сделать это, так каков правильный путь?
Спасибо,
Джо