Asp.net mvc InRequestScope未处理
我在ASP MVC项目中使用Ninject进行数据库绑定。在“private static IKernel CreateKernel()”中,我绑定了一个数据库对象,如下所示:Asp.net mvc InRequestScope未处理,asp.net-mvc,ninject,Asp.net Mvc,Ninject,我在ASP MVC项目中使用Ninject进行数据库绑定。在“private static IKernel CreateKernel()”中,我绑定了一个数据库对象,如下所示: kernel.Bind<IDbSession>().ToProvider<IDbSession>(new NhDbSessionProvider()).InRequestScope(); kernel.Bind().ToProvider(新的NhDbSessionProvider()).InRe
kernel.Bind<IDbSession>().ToProvider<IDbSession>(new NhDbSessionProvider()).InRequestScope();
kernel.Bind().ToProvider(新的NhDbSessionProvider()).InRequestScope();
这几乎完全符合预期,但是站点上的一些页面使用AJAX调用控制器上的方法,并且似乎每一个调用都会打开一个SQL连接,并且不会在控制器返回时处理它。最终,这会导致SQL数据库上的NumberOfConnections超过最大值,并且站点会抛出连接不可用的错误
我是Ninject的新手,我接管了一个现有的项目,试图在不做重大改变的情况下完成这项工作。我能做些什么来处理这些东西?从我所读的内容来看,他们似乎已经自动地这样做了,但也许我就是不明白
如果我需要分享更多的代码,请告诉我 根据 但是,InRequestScope的文档中有一节介绍 具体而言: 使用Ninject.Web.Common包 在web.config中手动注册OnePerRequestModule(例如,如果您 不使用Ninject.Web.MVC*NuGet包)
您的实例可能正在/将要被处置,但不是在您预期的时间。似乎有人出于任何原因(不是我)评论了这一行。将其添加回去可以解决问题
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
我相信SQL连接最终会消失,我不清楚这是因为dispose最终被调用,还是因为它们在SQL Server端超时。当然,在web请求完成之后,这种情况就会发生。。。。至少几分钟后。如果它真的在做它应该做的事情,有没有办法强迫它早点做呢。。。您对OnePerRequestModule的评论让我找到了下面的答案。谢谢