웹 API/MVC 응용 프로그램의 세션을 관리하기 위해 ninject를 사용하고 있습니다. 코드는 다음과 같습니다 :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이 호출되지 않는지 잘 모르겠다. 나의 설치 프로그램에서 뭔가 빠졌는가? OnDeactivation
이 항상가 호출되기 때문에 OnDeactivation
동안 Commit
를 호출
- 커밋을 다른 곳으로 옮길 것입니다. 내 문제는 ondeactivation이 (항상) 호출되지 않았다는 것입니다 - 그 이유는 무엇입니까? – Bonnotbh
@Bonnotbh OnDeactivation 및 폐기는 일반적으로 Ninject에서 비결정입니다. Ninject는 쓰레기를 GC로 수집 한 후 정리합니다. 데이터베이스 연결에는이 기능을 사용할 수없는 경우가 종종 있습니다. – Steven