2010-12-23 133 views
1


我在我的程序中實現了延遲加載。它是通過代理類來完成,如:延遲加載實現的問題

class Order 
{ 
    public virtual IList<Item> Items {get; set;} 
} 

class OrderProxy 
{ 
    public override IList<Item> Items 
    { 
     get 
     { 
      if (base.Items == null) 
       Items = GetItems(base.OrderID); 
      return base.Items; 
     } 
     set { base.Items = value; } 
    } 
} 

的問題是,每當我實例化代理類,甚至沒有觸及項目屬性,它會嘗試加載項!
正如您所知,我想實例化代理類並將實例返回到BLL而不是域對象本身。

有什麼問題?
.NET CLR在類的任何時候訪問(讀取)屬性嗎?
任何其他方法?

感謝

+0

假設沒有代碼嘗試設置到建設項目,做的是,在基類的項目是一個自動實現的屬性有什麼關係這種行爲? – 2010-12-23 16:57:17

+0

沒關係,只是在我自己的示例項目中嘗試了這一點,我的項目沒有被實例化。但是,無論您是測試它的值還是在調試器中查看它,它都會獲取。 – 2010-12-23 17:01:10

回答

4

有時它是調試器預覽觸發裝載

4

什麼問題? .NET CLR 何時訪問(讀取)類中的屬性, 是什麼時候它正在安裝類?

要查看哪些代碼訪問屬性,簡單地把一個斷點在那裏,並期待在堆棧跟蹤窗口(調試菜單 - 窗口 - 調用堆棧)。