2008-09-15 32 views
12

我一直在使用一些基本的AOP樣式解決方案來解決安全性,日誌記錄,驗證等橫切關注問題。我的解決方案包括Castle Windsor和DynamicProxy。我已經走下了這條路,因爲我可以使用基於Boo的DSL來應用所有內容,並保持我的代碼清除屬性。我被告知在週末看看PostSharp,因爲它應該是一個「更好」的解決方案。我已經快速瀏覽過PostSharp,但是我被Attribute的用法拖延了。應用AOP

有沒有人嘗試過這兩種解決方案,並會分享他們的經驗?

回答

9

我只看了一下castle-windsor很短的時間(還沒有),所以我不能對此發表評論,但我確實使用了postsharp。

上一次修改作者的編輯時編輯。它會在編譯後將修改代碼的後編譯步驟進行廣告。編譯代碼就好像您只是將交叉關注點編程到您的代碼中一樣。這比運行時編織更具性能,並且由於使用了屬性,Postsharp非常易於使用。我認爲使用AOP的屬性不像使用DI的問題那樣困難。但這只是我個人的口味。

但是......

如果您已經使用依賴注入的城堡我沒有看到一個很好的理由,爲什麼你不應該還用它進行AOP的東西。我認爲雖然運行時的AOP比編譯時慢一點,但它也更強大。 AOP和DI在我看來是相關的概念,所以我認爲使用兩個框架是一個好主意。所以我可能會再看看城堡的東西,下一個項目我需要AOP。

14

夫婦與PostSharp小問題...

一個問題我已經與PostSharp是,雖然使用asp.net,對異常消息的行號被注入的IL指令數「出」由PostSharp組成,因爲PDB不會被注入:-)。

另外,如果在運行時未提供PostSharp程序集,則會發生運行時錯誤。使用Windsor,交叉切割可以在以後不用重新編譯代碼的情況下關閉。

(希望這是有道理的)

+5

這是我偶然發現一個很老的答案,但我只是想指出,PostSharp現在所做的實際轉換PDB文件,所以調試問題是沒有更多的(參見: http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced-assemblies) – 2013-10-28 02:06:28