如何使用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();
    }
}

IDocumentStoreUnload方法中释放,但据我所知,从未调用过Unload方法。

如果有人能告诉我为什么我的IDocumentStore被处置,那就太好了,但我会在实际处置时找到一种调试方法。是否可以在释放特定对象时触发?

我已经非常仔细地检查了,IDocumentStore对象永远不会被我的(仍然非常小的)代码库处理。

如何使用VS2012在对象被释放时进行调试

我不确定这是否是问题所在,但是RavenDB IDocumentStore应该具有单实例生存期范围,而IDocumentSession应该具有每个请求的范围。

我自己使用 AutoFac,但快速搜索如何在 Ninject 中定义生命周期范围产生了此页面。

请尝试在适合IDocumentStore的地方添加.InSingletonScope(),看看是否可以解决问题。

如果您打算在会话中使用Ninject,那么看起来.InRequestScope()将是合适的选择。