Я использую ninject для управления сеансом для приложения Web API/MVC. Код выглядит следующим образом:Ninject 3.2 OnDeactivation не запускает веб-API
Bind<ISession>().ToMethod(c => c.Kernel.Get<ISessionFactory>().OpenSession())
.InRequestScope()
.OnActivation(s => s.BeginTransaction())
.OnDeactivation((s) =>
{
try
{
s.Transaction.Commit();
}
catch (Exception e)
{
s.Transaction.Rollback();
}
s.Close();
s.Dispose();
});
}
код OnActivation называется правильно - когда сеанс вводится транзакция началась. Однако, когда запрос заканчивается, ondeactivation не вызывается. Поэтому я могу запрашивать вещи из базы данных, но не фиксировать изменения (если я не совершаю транзакцию в другом месте).
Я не совсем уверен, почему OnDeactivation не вызывается - я что-то упустил в своей настройке ninject?
отметил - будет перемещать фиксацию в другом месте. моя проблема заключалась в том, что ondeactivation не вызывается (когда-либо), хотя - любая идея, почему это может быть? – Bonnotbh
@Bonnotbh OnDeactivation и утилизация обычно недетерминирована в Ninject. Ninject очистится после сбора мусора на GC. Это часто не работает для соединений с базой данных. – Steven