[英]How to Dispose DbContext(or object) in asp.net mvc3 App when Ninject is used as dependency resolver
對於這個Demo,我創建了一個虛假的Database +存儲庫,如下所示
public interface IDemoRepository
{
string[] GetUsers();
}
public class DemoRepository : IDemoRepository, IDisposable
{
public string[] GetUsers()
{
string[] Users = { "Robert","Linda","Jack"};
return Users;
}
public void Dispose()
{
//do nothing
throw new Exception("Disposed is called");
}
}
public class TestController:Controller
{
protected IDemoRepository _repository;
public BaseController(IDemoRepository repository)
{
_repository = repository;
}
public ActionResult()
{
var users = _repository.GetUsers();
Return View(users);
}
}
我從NUGet安裝了ninject並在下面添加了用於解析存儲庫的代碼
kernel.Bind<IDemoRepository>().To<DemoRepository>()
Ninject沒有調用DemoRepository.Dispose
,我添加了一個斷點,即使我當前的代碼拋出錯誤但是Ninject沒有調用DemoRepository.Dispose
。
任何人都能建議我如何處置這個物體。
如果要處理,請確保您的存儲庫綁定到Ninject中的請求范圍:
kernel.Bind<IDemoRepository>().To<DemoRepository>().InRequestScope();
您不需要Dispose()
DbContext
,因為它已經正確管理所有連接。 這是ASP.NET MVC提示#34 - 處理您的DataContext(或不要)的引用:
調用DataContext.Dispose()方法的最重要結果是與DataContext關聯的任何打開的連接都將關閉。 這似乎非常重要,但事實並非如此。 它不重要的原因是DataContext類已經管理了它的連接。 默認情況下,DataContext類會自動打開和關閉連接。
...
通常,當您在DataContext對象上調用Dispose()方法時,與DataContext對象關聯的任何數據庫連接都已關閉。 DataContext對象在執行數據庫查詢后立即關閉了數據庫連接。 所以,Dispose()方法實際上沒有任何事情可做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.