2009-09-30 65 views
0

我知道編寫自定義屬性來裝飾方法並在方法執行之前得到評估,但有沒有辦法對其進行修改,以便在執行該方法之後對屬性進行評估可能創建一個在之後而不是之前被評估的屬性?

理論上(僞代碼):

public void MyMethod() 
{ 
    Console.WriteLine("Hello World"); 
} 
[AttributeToExecuteAfter] 

我是否濫用屬性的概念?如果有技術上的原因,這是不可能的,那是什麼?

回答

1

您是否指.net MVC中的ActionFilters?

如果是的話,可以通過擴展抽象ActionFilterAttribute類來覆蓋OnActionExecuted方法。但這些僅適用於mvc操作方法。

2

我認爲你是誤解,是的。屬性不是在您的方法運行之前或之後運行的代碼。屬性是附加到方法(或類等)的一段元數據。使用反射,可以編寫代碼來讀取元數據。

這是我能想到的最好的例子:

業務對象框架我用有DataPortal的概念。在n層環境中,DataPortal位於服務器上並執行業務對象的CRUD方法。 DataPortal是這樣編寫的,在調用我的任何一個CRUD方法之前,它首先查看該方法是否具有RunMeInATransaction屬性。如果有,它創建一個事務,運行該方法,然後提交事務。從概念上講,這很像有方法的屬性;我的方法可以有RunMeInATransaction屬性。

0

正如Ken所說,屬性只是元數據附加到方法/屬性/字段/類,對「標記」元素有用,然後能夠使用反射將其識別爲代碼。

即,在Linq2Sql中使用屬性作爲映射類與數據庫表的一種方式。

您的誤解可能來自於C#編譯器實際使用某些特殊屬性來執行具體操作的事實。但是這種功能對我們來說是不可用的,人類開發者:)

1

使用PostSharp您可以創建用於輸入和退出裝飾方法的自定義處理程序。

相關問題