Skip to content

Latest commit

 

History

History
41 lines (35 loc) · 2.29 KB

README.md

File metadata and controls

41 lines (35 loc) · 2.29 KB

KingAOP Lab

KingAOP是本人已知現實中,從高分一直被扣分到不實用的 C# AOP solution。
個人認為實作最完整的是[SheepAspect],它是仿[AspectJ]實作所以理論上很完整,但實際用起來太複雜不符合現實。而KingAOP是仿[PostSharp]實作的。其它的方案本人就不評論了。

補充 on 2019-12-28:發現基本上無法實作 wait/retry aspect,總分十分扣分四分。(自己打臉自己 Orz)
補充 on 2020-01-07:再一輪評估。無法多重疊加Aspect 再扣一分。且纏繞標的必需 assignment 為 dynamic 型別,這會失去強型別的效益再扣二分。重下結論為不實務但有趣。

實作原理

使用 .Net Framework 4.x 才開始支援的 System.Dynamic 實作出來的。 關鍵中的關鍵字是IDynamicMetaObjectProvider 介面DynamicMetaObject。 當然還需搭配Expression 類別Attribute 類別等等相關項目才能完成。真有興趣就拜讀這篇文章吧Implementing Dynamic Interfaces

架構分析圖

花了一、兩天時間讀碼,把KingAOP的主架構圖逆向弄出來。看得懂就恭禧你了;看不懂就當藝術品看吧。
KingAOP結構分析類別圖

測試紀錄

測試紀錄-無AOP

Step 1
Step 2
執行失敗!測試例外!
Press any key to continue.

測試紀錄-有AOP

OnEntry
Step 1
Step 2
OnException
OnExit
Return 我來自OnException。
OnSetValue我是誰
OnGetValue
foo I am god!
執行成功。 <--- 明明失敗卻成功。
Press any key to continue.

(EOF)