2009-04-07 107 views
4

我想自定義屬性應用到一些方法,指示他們應該作爲一個事務處理。在一般情況下,我知道如何通過從System.Attribute繼承來創建自定義屬性,但我不知道該怎麼做我需要什麼。如何通過屬性控制方法行爲?

我的目標是這樣的:

[TransactionalMethod()] 
public void SaveData(object someObject) 
{ 
    // ... maybe some processing here 
    // ... then the object gets saved to a database 
    someObject.Save(); 
} 

的TransactionalMethod()屬性將使法的行爲,就好像它被包裹在一個TransactionScope ...

try 
{ 
    using(TransactionScope scope = new TransactionScope()) 
    { 
     SaveData(someObject); 
     scope.Complete(); 
    } 
} 
catch 
{ 
    // handle the exception here 
} 

如果保存數據( )方法拋出一個異常,那麼我們會落在Using之外,並且scope.Complete不會被調用。

我不想要找到每一個實例,其中保存數據()被調用和手動添加使用語句周圍的代碼。我怎麼能做一個導致這種行爲的屬性?

回答

4

Aspect.NET是另一個服務於同一目的的項目

7

基本上你想Aspect-Oriented Programming(AOP)。

看一看PostSharp - 它可以處理這口井。還有其他的選擇,但我沒有使用它們。

+0

詛咒你和你的快速發佈,Jon Skeet !!! :D我有幾乎完全相同的職位;我正在查找PostSharp的鏈接,現在已經完成了。 – Randolpho 2009-04-07 15:41:16

相關問題