我已經開始編寫一個小的ASP.NET MVC 4項目。到目前爲止,沒有一個前端,但是,當我開始使用API時,我的項目將會暴露。 API是使用Web API的API控制器創建的。 API控制器訪問存儲在Raven DB數據庫中的數據。當使用VS 2012和IIS Express調試我的代碼時,一切正常。在第一次請求期間,也就是說。在第二個請求中,Raven DB IDocumentStore對象(即數據庫連接對象)已被處置,我不知道它是如何發生的。如何使用VS2012來調試對象被丟棄的時間?
我用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
對象永遠不會被我的(仍然非常小的)代碼庫處置。
爲什麼不能在'IDocumentStore.Dispose()'方法中放置斷點,然後從調用堆棧的位置查看調用堆棧。不過,我的建議是綁定'IDocumentStore''InRequestScope()'並使用'OnePerRequestModule'使其工作。它會根據HTTP請求創建對象,並在最後自動處理它。在整個應用程序生命中保持一個數據庫連接並不是一個好主意,它可能會導致併發性和性能問題。 – mipe34
@ mipe34一個'IDocumentStore'是一個單身人士。看到我的答案。 –
mipe34:是否有可能在我沒有任何源代碼的方法中添加斷點?如果是這樣,怎麼樣?我沒有IDocumentStore實現的代碼。那麼,Raven DB是開源的,所以我想我可以自己構建它,但我寧願不... –