我已经开始编写一个小型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
对象永远不会被我的(仍然很小的)代码库处理。
答案 0 :(得分:0)
我不确定这是否是问题,但是RavenDB IDocumentStore
应该具有单实例生命周期范围,而IDocumentSession
应该具有每个请求范围。
我自己使用AutoFac,但快速搜索如何在Ninject中定义生命周期范围产生了this page。
请尝试在.InSingletonScope()
的适当位置添加IDocumentStore
,看看是否能解决问题。
如果您要在会话中使用Ninject,那么.InRequestScope()
似乎是适当的选项。