我正在使用ninject來管理Web API/MVC應用程序的會話。代碼如下:Ninject 3.2 OnDeactivation沒有發射Web 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在Ninject中,去激活和處置通常是不確定的。由GC收集垃圾後,Ninject將清理。這對於數據庫連接通常是不可行的。 – Steven