2009-07-15 30 views
2

我需要知道是否有任何方式(或另一個不同的方法)屬性知道什麼是他正在裝飾什麼。例如:通過C#中的屬性獲取有關裝飾成員的信息

class Cat 
{ 
    public Cat() { } 

    [MyAttribute] 
    public House House { get; set; } 
} 

裏面MyAttribute我必須做一些預處理的房子對象...

class MyAttribute : Attribute 
{ 
    public MyAttribute() 
    { 
     var ob = // Discover the decorated property, do some changes and set it again 
    } 
} 

我不知道這是否是更好的辦法,既不如果它實際上可以做到的,

回答

3

這不是屬性的工作方式。他們只是編譯時間元數據添加到某些東西。他們自己並沒有完成任何事情。在運行時,代碼可以使用該元數據來執行操作。

更新:基本上,據我所知,你正試圖完成兩件事情。首先是告訴存儲庫不要加載一些屬性。屬性可以用於此目的,但存儲庫代碼應該對實體類型使用反射,並查看它不應該首先加載的內容。第二件事是你想要第一次調用該屬性。您需要檢查每次通話是否已加載,並在第一次被叫時加載。這可以通過手動插入這樣的代碼或使用類似PostSharp的後處理代碼來實現,並且可以通過查看屬性自動注入方法調用。可能,這是你首先要求的。

+0

那麼這裏的正確方法是什麼? – Alaor 2009-07-15 02:27:08

+0

也許,您應該提及您的實際問題以獲得最佳解決方案。更清楚的是,*你首先想要完成什麼? – 2009-07-15 02:36:12

1

你想要的是在EntLib中的Policy Injection application block

開發人員可以使用的政策 注入應用程序塊指定一組政策的 條件對象的 橫切行爲。策略 是一系列 處理程序執行時,客戶端代碼 調用類的方法的結合和與 基於屬性的 政策,一系列的選擇類和類 成員匹配規則 除外(方法和屬性)爲 ,應用程序塊附加 處理程序。