Web API/MVCアプリケーションのセッションを管理するためにninjectを使用しています。コードは次のとおりです。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が呼び出されていないのかわかりません - 私は自分の鼻腔の設定で何かを見逃していますか? OnDeactivation
が常にが呼び出されますのでOnDeactivation
中Commit
を呼び出す
が表示されています - コミットは他の場所に移動します。私の問題は、オンデアクチベーションが(今まで)呼び出されていないということでした。 – Bonnotbh
@Bonnotbh OnDeactivationと廃棄は通常、Ninjectでは非確定的です。 NinjectはGCによってゴミが収集された後にクリーンアップします。これは、データベース接続では実行できないことがよくあります。 – Steven