2010-10-19 51 views
5

有沒有一種方法可以跟蹤和攔截對自動實現的屬性中的值的調用?跟蹤調用自動實現的屬性

我想有一些代碼看起來有點像這樣:

[Tracked] 
public int SomeProperty { get; set; } 

理想的屬性是能夠攔截更改屬性值。這可能嗎?

我不希望它有第二段代碼稍後旋轉一個對象並請求值,而是該屬性應該在設置值時加上值。

回答

4

不可以。您這樣做的方式是不使用自動屬性。唯一可行的解​​決方案是使用類似於Castle AOP的東西來創建類的自動包裝並跟蹤更改,但這是很多難以實現的工作。

3

你應該可以用AOP框架來做到這一點,比如PostSharp(我注意到它現在是商業版)。還有幾個鏈接here,但一些鏈接已經死了。

3

如果你想要一個在運行時工作的解決方案,那麼你需要一個面向方面編程(AOP)框架;我用CciSharp取得了一些成功。它不如PostSharp成熟,但它的工作原理基本相同:它將修改已編譯的代碼,生成另一個程序集。

如果你只是想要測試(或分析),那麼還有另一種選擇:Microsoft Moles(這也是免費的)。它的工作原理非常不同它在運行時使用「繞道」類型的注入來更改程序,攔截屬性getter和setter方法。