我刚刚接触到 Ninject.Mvc3 NuGet 包,我想知道创建的对象持续多长时间。InRequestScope
很容易理解:只要 Web 服务器处理特定的 Web 请求,在此范围内创建的每个对象都存在。 (为了迂腐,对象的生命周期与 HttpContext.Current
对象一样长)
但是 InSingletonScope
对象能持续多久呢?文档说只要 Ninject 内核本身这样做——它包含在 NinjectWebCommon
静态类中。到目前为止,我所做的最好的猜测是,只要服务器运行 web 应用程序,内核就会一直存在——只要服务器启动,直到应用程序在 IIS 中手动重新启动或更新,对象都在范围内。
我很好奇,因为我很想拥有一些包含只读数据字典的数据访问器作为单例范围,我想知道这是一个好主意,还是计划中的内存泄漏。
最佳答案
只要您的 ASP.NET 应用程序池持续存在,它就会持续存在。
您的应用程序池何时回收?有很多设置可以管理这个:阅读 Configuring Recycling Settings for an Application Pool (IIS 7) 。
但基本上,它不会永远存在:如果您想在其中存储只读数据,只需确保将其全部加载到 Application_Start()
中,以便在请求进入时准备就绪,您应该很高兴。
关于c# - webapp 的 `InSingletonScope` 到底有多长?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13930331/