如何在对象被处理时使用VS2012进行调试?

时间:2013-01-23 20:35:29

标签: c# asp.net-mvc-4 asp.net-web-api ninject ravendb

我已经开始编写一个小型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对象永远不会被我的(仍然很小的)代码库处理。

1 个答案:

答案 0 :(得分:0)

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

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

请尝试在.InSingletonScope()的适当位置添加IDocumentStore,看看是否能解决问题。

如果您要在会话中使用Ninject,那么.InRequestScope()似乎是适当的选项。