2011-04-08 24 views

回答

29

你可以嘗試各種IOC容器,配備了AOP開箱即用(例如Spring.Net有一個強大的AOP freamework,溫莎城堡有Interceptors也是如此Unity),使用Snap那些或使用IL-織女像Postsharp

更新 我只是發現了關於「Afterthought」的 - 儘管在開發的早期 - 看起來很有希望。它的目標是成爲Postsharp的一個開源替代品。

我忘了提Mono.Cecil它能夠IL編織以及:

在簡單的英語,與塞西爾,可以加載現有的管理組件,瀏覽所有包含的類型,修改它們的飛行並將修改後的程序集保存到磁盤。

Fody使用Cecil進行編織,並允許在構建階段集成該步驟。它帶有一些方便的插件(例如在編譯後實現INotifyPropertyChanged或從公共屬性生成ToString方法)。

5
+0

+1適用於PostSharp,它非常強大且非常易於使用 – 2011-04-09 00:07:17

8

我一直在四處尋找完全相同的東西,我可以很自信地告訴你.Net中沒有任何東西可以在各方面與AspectJ進行遠程比較。

在.net世界中,我發現動態代理經常用作AOP機制。 只有少數支持像Postharp和Afterthoughts這樣的實際IL編織的工具,它們都可以通過屬性聲明性編程來實現Aspect Orientation。它們都易於使用,但是如果您來自AOP背景(AspectJ),我不確定它們會是您稱爲AOP的。

到目前爲止,我還沒有看到任何.Net實現的「真正」AOP模式(正如十年前正式定義的那樣,即切入點,連接點,建議,方面等),可能是因爲很少有人意識和興趣一般來說,AOP的常用用途通常侷限於日誌記錄,事務管理和異常策略,而IoC和屬性通常就足夠了。

在.NET的這個階段,商業規則和域驅動代碼的AOP仍然很少被看到(也沒有被任何工具支持)。

我最近遇到的只有一個開源項目似乎開始填補這個空白(http://sheepaop.codeplex.com),看起來還很早,但看起來像是一個AspectJ-ish實現。正如我前面所說,它仍然不會與AspectJ(根據你的問題)進行比較,但這種相似性非常明顯,似乎是故意的。

2

由於問題與.NET有關,因此您可以使用Nemerle語言,它具有強大的元編程功能。

+1

Nemerle還允許編譯具有宏屬性的C#源代碼。 這樣你就可以用C#獲得AOP。 – 2013-04-05 18:59:23

+0

這是否意味着Nemerle編譯器包含C#編譯器? – ironic 2013-04-08 08:30:40

+0

是的,Nemerle可以解析C#源代碼並編譯它。您可以將.cs文件添加到您的項目中,並且它可以工作。無論如何,你可以寫任何前端Nemerle編譯器,如VB.Net,源代碼在這裏:https://github.com/rsdn/nemerle/tree/master/snippets/csharp-parser – 2013-04-14 11:37:13