2013-08-20 71 views
0

關於下面的代碼,在查找需要處理的對象時,using語句是否考慮了通過_ItemDataBound方法和Eval方法調用的對象?還是會嘗試在附加事件之前進行處置,並且因爲它們在生命週期的後期發生而被解僱?將使用語句與Repeater DataBinds和事件結合使用

換句話說,在所有的Evals和附加事件被調用之後,它是否僅處理datacontext,或者這會導致datacontext已被處置錯誤?

protected void Page_Load(object sender, EventArgs e) 
{ 
    using (EventManager manager = new EventManager()) 
    { 
     EventDates = manager.GetWhatsOn(Request.QueryString["category"]); 

     rptEventDates.DataSource = EventDates; 
     rptEventDates.DataBind(); 
    } 

...

public class EventManager : IDisposable 
{ 
    private MainDataContext db; 
    public EventManager() 
    { 
     db = new MainDataContext(); 
    } 

    ....other methods.... 

    public void Dispose() 
    { 
     db.Dispose(); 
    } 
} 

回答

1

關於下面的代碼,並使用using語句,考慮到發現需要處置的對象時通過_ItemDataBound方法和eval方法叫做考慮的對象?

不,它根本沒有「發現」對象 - 它只是處理聲明第一部分中提到的對象。所以,你的代碼是大致等同於:

EventManager manager = new EventManager(); 
try 
{ 
    EventDates = manager.GetWhatsOn(Request.QueryString["category"]); 

    rptEventDates.DataSource = EventDates; 
    rptEventDates.DataBind(); 
} 
finally 
{ 
    manager.Dispose(); 
} 

閒來無事將被安置,但EventManager本身肯定處置。

如果有什麼需要資源而不是被處置,直到後來,你不應該使用using聲明。

+0

感謝喬恩,有道理。所以真的代碼是好的,但我不應該用using語句來包裝repeater,而應該讓垃圾回收做它的工作? –

+0

@ A-Bop:我不知道'EventManager'是什麼或'GetWhatsOn'方法的作用,所以很難說你的代碼是否可以。 –

+0

這很公平,我會盡力解釋我所得到的 - 對不起,如果它不是很清楚。如果EventDates包含在中繼器上的Eval()上調用的對象,但該對象來自EventManager中的datacontext - 是在Eval中處理的datacontext,因爲它在using語句中? –

相關問題