如何使用VS2012在对象被释放时进行调试
本文关键字:调试 释放 何使用 VS2012 对象 | 更新日期: 2023-09-27 17:55:55
我已经开始编写一个小型 ASP.NET MVC 4项目。但是,到目前为止还没有前端,因为我开始使用我的项目将公开的 API。API 是使用 Web API 的 API 控制器创建的。API 控制器访问存储在 Raven DB 数据库中的数据。使用 VS 2012 和 IIS Express 调试我的代码时,一切正常。在第一个请求期间,就是这样。在第二个请求中,Raven DB IDocumentStore 对象(即数据库连接对象)已被释放,我不知道它是怎么发生的。
我使用 Ninject将IDocumentStore
对象注入我的存储库对象,Ninject 的设置如下:
public class NinjectModule: Ninject.Modules.NinjectModule {
readonly string _connStrName;
IDocumentStore _store;
public NinjectModule(string connStrName) {
_connStrName = connStrName;
}
public override void Load() {
_store = new DocumentStore { ConnectionStringName = _connStrName };
_store.Initialize();
Bind<IDocumentStore>().ToConstant(_store);
}
public override void Unload() {
_store.Dispose();
base.Unload();
}
}
IDocumentStore
在Unload
方法中释放,但据我所知,从未调用过Unload
方法。
如果有人能告诉我为什么我的IDocumentStore
被处置,那就太好了,但我会在实际处置时找到一种调试方法。是否可以在释放特定对象时触发?
我已经非常仔细地检查了,IDocumentStore
对象永远不会被我的(仍然非常小的)代码库处理。
我不确定这是否是问题所在,但是RavenDB IDocumentStore
应该具有单实例生存期范围,而IDocumentSession
应该具有每个请求的范围。
我自己使用 AutoFac,但快速搜索如何在 Ninject 中定义生命周期范围产生了此页面。
请尝试在适合IDocumentStore
的地方添加.InSingletonScope()
,看看是否可以解决问题。
如果您打算在会话中使用Ninject,那么看起来.InRequestScope()
将是合适的选择。