[英]OutputCache setting inside my asp.net mvc web application. Multiple syntax to prevent caching
[英]Provide a Repository class for my asp.net mvc web application. How to make sure i am disposing eveything correctly
我在asp.net mvc Web應用程序中實現存儲庫類時,有一個關於如何管理我的Dispose方法的問題。
目前我有以下內容:
現在在生成的控制器類中,我得到了這個處理方法:
public class DeptsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
//code goes here
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
現在,我想將數據訪問代碼移動到單獨的Repository類中,並在Repository類而不是控制器類內部初始化DbContext對象。
所以我創建了以下存儲庫類:
public class repository
{
private ApplicationDbContext db = new ApplicationDbContext();
//code goes here...
public void Dispose()
{
db.Dispose();
}
我將控制器類修改為使用存儲庫類,如下所示:
public class DeptsController : Controller
{
//private ApplicationDbContext db = new ApplicationDbContext();
private repository repo = new repository();
protected override void Dispose(bool disposing)
{
if (disposing)
{
repo.Dispose();
}
base.Dispose(disposing);
}
}
任何人都可以這樣做:
base.Dispose(disposing);
控制器內部將確保正確處理所有非托管資源。.但是當我將數據訪問權限移動到存儲庫內部時,如何確保存儲庫消耗的所有非托管資源都已處理? 並在controller類內調用base.Disposed(dispose),是否還會處置存儲庫類內消耗的所有非托管資源? 任何人都可以這樣做嗎?
據我所知,您無需執行其他任何操作DbContext
在Repository
類中處置DbContext
。
如果您有更多的資源 Repository
類,那么你將需要添加自己的.Dispose()
調用在Repository.Dispose
,這將是它。
base.Dispose(disposing)
在DeptsController
調用類Dispose
的方法,它的基類 ,即Controller
......是如此的基類可以處理它的內部使用的資源-什么你應該擔心。
上下文不應該無限期地保持打開狀態。 它們旨在在需要時創建,使用和完成后進行處置。
另外,ASP.NET是一個無狀態平台,因此無論如何響應都會被垃圾回收。
因此,您的存儲庫不需要實現IDispoasable
,因此您的控制器也不需要實現。 在您的存儲庫的using
塊內創建一個DbContext
,它將被自動處置。
然而...
我如何確保處置庫消耗的所有非托管資源?
這就是Dispose
目的。 產生可拋棄物體的任何原因均應負責處置它們。 因此,如果您在存儲庫中創建了可拋棄的對象而不能立即處置(出於某種原因),那么您需要在Dispose
方法中處置它們。 如果您不從可拋棄的基類繼承,那么就沒有可調用的基類; 否則,您應調用基處置以確保基類處置任何資源
正在在控制器類內部調用
base.Disposed(disposing)
disposebase.Disposed(disposing)
,還將處置存儲庫類內部消耗的任何非托管資源嗎?
否。調用base.Dispose
調用基類的Dispose
方法。 基類不了解存儲庫,因此調用base.Dispose
不會處理存儲庫。 當調用repo.Dispose()
時,這是在控制器的Dispose
方法中完成的。
調用base.Dispose(dispose); 控制器內部將確保正確處理所有非托管資源。
好吧,它可以確保處置基類創建的所有非托管(和托管IDisposable
)資源。 由派生的控制器創建的資源應在重寫的Dispose
方法中Dispose
(您正在執行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.