2014-12-26 22 views
1

我正在爲數據庫操作創建api的過程中,我必須用try catch來包裝api中的每個函數調用。我基本上試圖獲得與python中的裝飾器相同的功能。帶AOP的數據庫控制器API試用Catch

我讀了一堆文章,這個文章看起來是最好的例子:http://ayende.com/blog/3474/logging-the-aop-way。我遇到的一個問題是,在使用需要打包的函數的接口解析容器之後,必須對已解析的容器進行調用才能調用其中一個函數。

我希望我的控制器的用戶能夠調用我的類來實現上述接口,並且對於我在內部完成的try try catch業務一無所知。

這可能嗎? 如果解決方案很簡單,我很抱歉,我沒有太多的C#經驗。 謝謝。

+0

使用PostSharp非常簡單,但會花費幾美元。 – Darek

+0

[這裏](https://cuttingedge.it/blogs/steven/pivot/entry.php?id=91)是我的首選技術。 – qujck

回答

0

如果你可以花PostSharp幾塊錢,這裏是實現這一目標的一種方法:

[Serializable] 
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect 
{ 

    public override void OnException(MethodExecutionArgs args) 
    { 
     Console.WriteLine(args.Exception.Message); 
     args.FlowBehavior = FlowBehavior.Return; 
    } 
} 

然後使用[PrintAndIgnoreException]來裝飾你的方法需要被覆蓋。 PostSharp也是所有AOP框架中表現最好的,因爲額外的代碼是在編譯後編寫的,所以沒有運行時間的損失。我不爲他們工作,現在我只是將它用在我所做的每件事上。

+0

嗯,它看起來ExceptionAfter包含在免費的PostSharp Express中。如果我沒有誤讀他們的網站。 – hschne

+0

這可能是,嘗試,沒有壞處...... :) – Darek

+0

由於多種原因,PostSharp不適合我公司。你們能想到其他框架或方法來編碼我想要達到的目標嗎? – Tony