2013-10-29 75 views
0

我想記錄方法的條目。在入口日誌中,我將擁有該方法接收的輸入\參數。這必須爲數千種方法完成。使用屬性讀取方法參數

我想使用C#ATTRIBUTES來記錄輸入參數,因爲它們在方法調用之前觸發。 (類似於MVC中的ActionFilters)

是否可以通過屬性讀取方法參數? ,調用該裝飾有一個屬性的方法的代碼

+1

這不是常規C#/ .NET支持的東西;有像後期那樣的第三方工具允許這樣的事情,但是:這是跨出C# –

+0

實際上,有一些方法可以根據您的架構來做到這一點。這是一個MVC4項目還是你想自己設計這樣的系統?根據你的答案,我可以給你詳細的信息。 – Aidin

回答

1

您正在尋找的概念被稱爲面向方面編程(AOP)。這是一種技術,允許您在整個應用程序代碼中對樣板代碼塊進行「編織」。記錄就是一個很好的例子。您可以採取艱難的方式,並在手動調用每個方法前後執行日誌記錄(一方面在大型項目中不可行,另一方面容易出錯)。
或者您可以使用AOP框架,該框架允許您在一個地方定義這些交叉切割功能並將其應用於您的應用程序代碼。有幾種方法可以實現這一點;一種是在構建應用程序邏輯之後創建IL,並因此在編譯時集成這些方面。一個衆所周知的例子是PostSharp。另外還有一個免費版本,這對於開始是有好處的。
順便說一句:PostSharp嚴重依賴於屬性,所以你在正確的軌道上。
另一個選擇是在運行時集成這些方面(關鍵字是攔截)。大多數IoC框架都提供這個功能。這種方法很容易使用,但有一些缺點恕我直言(較弱的運行時性能,只有虛擬方法可以被攔截)。

1
  1. 屬性不是「方法調用之前燒製」可以(或者可以不)做基於所述屬性的存在的東西。

  2. 屬性不知道它應用的成員,也不能以任何(直接)方式訪問它。