InRequestScope不处理

时间:2018-08-01 17:50:22

标签: asp.net-mvc ninject

我在ASP MVC项目中使用Ninject进行数据库绑定。在“私有静态IKernel CreateKernel()”中,我将绑定数据库对象,如下所示:

kernel.Bind<IDbSession>().ToProvider<IDbSession>(new NhDbSessionProvider()).InRequestScope();

这几乎可以按预期工作,但是站点上的某些页面使用AJAX调用控制器上的方法,并且似乎这些调用中的每一个都会打开一个SQL连接,并且在控制器返回时不会对其进行处理。最终,这将导致SQL数据库上的NumberOfConnections超过最大值,并且该站点引发错误,提示连接不可用。

我对Ninject很陌生,他接管了一个现有项目,试图在不做重大更改的情况下完成这项工作。有什么想法可以处理这些对象吗?看来他们应该已经从我正在阅读的内容中自动进行了此操作,但也许我只是不理解。

如果我需要共享更多代码,请告诉我。

2 个答案:

答案 0 :(得分:1)

根据documentation,一次性实例在请求处理结束时处置。

但是,InRequestScope的文档在Ensuring Deterministic Dispose calls in a Request Processing cycle中有一节。

特别是:

  

使用Ninject.Web.Common包

     

在web.config中手动注册OnePerRequestModule(例如,如果您   不使用Ninject.Web.MVC * NuGet包)

可能是您的实例正在/将要被处置的情况,但并非在您期望实例被执行的时候。

答案 1 :(得分:0)

似乎有人出于某种原因(不是我)注释了此行。重新添加即可解决该问题。

DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));