2

我已经开始编写一个小的 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过,我的(仍然非常小的)代码库从未处理过该对象。

4

1 回答 1

0

我不确定这是否是问题所在,但 RavenDBIDocumentStore应该有一个单实例生命周期范围,而 aIDocumentSession应该有一个每个请求的范围。

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

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

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

于 2013-01-23T23:38:45.927 回答