J'utilise ninject pour gérer ma session pour une application Web API/MVC. Le code est le suivant:Ninject 3.2 OnDeactivation ne déclenche pas l'API Web
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();
});
}
Le code OnActivation est appelé correctement - lorsque la session est injectée une transaction est commencée. Cependant, lorsque la requête se termine, l'ondeactivation n'est pas appelée. Par conséquent, je peux interroger des choses à partir de la base de données mais ne pas valider les modifications (à moins que je ne commette la transaction ailleurs).
Je ne suis pas vraiment sûr pourquoi le OnDeactivation n'est pas appelé - est-ce que je manque quelque chose dans mon installation de ninject?
noté - déplacera le commit ailleurs. mon problème était que la désactivation n'était pas appelée (jamais) - aucune idée pourquoi cela pourrait être? – Bonnotbh
@Bonnotbh OnDeactivation et l'élimination est généralement non déterministe dans Ninject. Ninject nettoiera après la collecte des ordures par le GC. Ceci n'est souvent pas réalisable pour les connexions à la base de données. – Steven