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的主架構圖逆向弄出來。看得懂就恭禧你了;看不懂就當藝術品看吧。
Step 1 Step 2 執行失敗!測試例外! Press any key to continue.
OnEntry Step 1 Step 2 OnException OnExit Return 我來自OnException。 OnSetValue我是誰 OnGetValue foo I am god! 執行成功。 <--- 明明失敗卻成功。 Press any key to continue.
(EOF)