2011-04-11 59 views
2

我們正在將PostSharp引入到我們的一個項目中。到目前爲止,它一直在努力工作!有一件事我們還沒有設法解決:如何有條件地提出建議。如何在PostSharp 2.0中有條件地啓動我們的方面

詳情: - 我們有這使得屬性StopWatchAttribute記錄運行方法 所需的時間 - 這個屬性接受一個枚舉「LoggingLevel」,這是在配置文件中設定值如0,1,2我們嘗試設置像StopWatchAttribute(new BaseService()。CurrentLoggingLevel)這樣的屬性構造函數,但是我們得到一個編譯錯誤:一個編譯錯誤:屬性參數必須是常量表達式,typeof表達式或屬性參數類型的數組創建表達式。

- >總結:我們希望有條件地調用這個通知,並且這個條件取決於屬性構造函數中的參數。

這可能嗎?

感謝您的幫助, 安德拉什

回答

4

你不能到屬性,PostSharp還是不給變量。由於您已經閱讀了配置中的值,只需在Initialize()方法上設置您的方面即可。在方面類中覆蓋它,然後將值保存到本地字段。您可以在整個方面使用該字段。這將價值編譯成本質上硬編碼的方面。

或者,您可以從您的建議方法(OnMethodStart等)的配置中獲取值,以便您可以在運行時在配置中對其進行更改。這是一種更靈活的方式,因爲它不會硬編碼任何東西。

請記住,您的變量正在運行時設置。 PostSharp是一個後期編譯框架,這意味着它可以在JIT甚至知道變量之前就工作。