Autofac выполняет удаление своего сеанса через модуль HttpModule с именем Autofac.Integration.Web.ContainerDisposalModule.
Вам необходимо либо
- Поместить собственную очистку сеанса в выполняемый модульдо утилизации контейнера.Это может быть проблемой, так как порядок HttpModules не гарантирован.
ИЛИ
- Удалите HttpModule для удаления контейнера из web.config и выполните собственную очистку области действия в течение жизни.в вашем приложении EndRequest
private void Application_EndRequest(object sender, EventArgs e)
{
ISession session = ContainerProvider.RequestLifetime.Resolve();
//cleanup transaction etc...
ContainerProvider.EndRequestLifetime();
}
ИЛИ
- Создайте класс диспетчера сеансов с IDisposable и областью действия на весь срок службы, примите ISession в качестве зависимости конструктора и выполните очистку сеансакогда он удаляется в конце срока службы.
public class SessionManager : IDisposable
{
private readonly ISession _session;
private ITransaction _transaction;
public SessionManager(ISession session)
{
_session = session;
}
public void BeginRequest()
{
_transaction = _session.BeginTransaction();
}
#region Implementation of IDisposable
///
/// Dispose will be called automatically by autofac when the lifetime ends
///
public void Dispose()
{
//commit rollback, whatever
_transaction.Commit();
}
#endregion
}
Вы должны обязательно инициализировать менеджер сеанса.
protected void Application_BeginRequest(object sender, EventArgs e)
{
SessionManager manager = _containerProvider.RequestLifetime.Resolve();
manager.BeginRequest();
}