2014-02-08 100 views
0

我有我想要緩存(他們的過去值)值的類的屬性。對象本身會跟蹤它們的變化,但我希望能夠用一個簡單的屬性來標記我想跟蹤的屬性。我怎樣才能監視屬性的變化,沒有任何手動代碼每個屬性?什麼是通過屬性監視屬性的優雅方式?

+0

[團結攔截(http://msdn.microsoft.com/en-us/library/dn178466%28v=pandp.30%29.aspx)是一種選擇 - 包裝所有的實例和之前捕獲信息/後調用。與屬性無關,所以沒有答案...(我不完全確定你的意思是「通過屬性監視」,因爲屬性並不意味着/自己做任何事情)... –

+0

@AlexeiLevenkov我想創建一個系統,當一個屬性被標記了一個屬性時,其更改會被其他子系統自動監控。 –

+0

您可能想要添加代碼的樣子,使其看起來像答案 - 樣本對象和對象的樣本創建......還要注意,您是否已經有了類似於「INotifyPropertyChanged」的東西。 –

回答

0

使用通用代理模式。 有很多代理生成器,但您可以使用遠程處理提供的真實/透明代理。

攔截對財產的呼叫,並做你想做的事情。

0

如果你想要一個屬性來擴展或改變一個屬性的行爲的東西,如監控,緩存,驗證或登錄你可能要考慮AOP (Aspect Oriented Programming)a good white paper can be found here too

在.NET中最常見的AOP工具Post Sharp

將該庫/工具集成到您的解決方案和Visual Studio中,它將查找特定的屬性,將其識別爲方面並將它們在編譯(或運行時,取決於某些因素)應用於目標屬性,方法,類,甚至整個程序集。

與帖子銳利,location interception aspect將允許您攔截目標的執行(在執行前,發生錯誤或發生錯誤時)並編寫一些代碼以在發生攔截時執行,並且您將獲得有關元數據的信息被攔截的目標(例如PropertyInfo)以及當前被攔截的對象實例或發生的錯誤。

有一些預先定義的方面(屬性)與銳利後打包,你可以立即使用它們,或者你可以創建自己的方面(屬性)與任何不同的行爲。