利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop
Aop即是面向切面編程,眾多Aop框架里Castle是最為人所知的,另外還有死去的Spring.NET,當然,.NET Core社區新秀AspectCore在性能與功能上都非常優秀,已經逐漸被社區推崇和有越來越多的人使用。感謝檸檬同學的禮物!
如果大家出于自身需求或者學習,想實現一個Aop,是不是覺得一來就要使用Emit去做?最近我了解到了System.Reflection.DispatchProxy這個corefx類庫,已經實現了動態代理功能。
下面演示一下它的使用方法:
System.Reflection.DispatchProxy只有一個Api,就是objecct Create<T,TProxy>() where TProxy:DispatchProxy,約束了只能傳入泛型參數,并不能從方法傳入類型,這就會帶來很多問題。而更可氣的是,給官方提了issue之后,還是不給增加這個api……
幸好,在那個issue下,issue作者提供了一個解決方案,就是用反射來構造這個泛型方法。我還在這基礎上,封裝了一下,加入了傳入攔截器實例和傳入攔截器構造方法參數的功能。
攔截器要實現這個接口,下面是對DispatchProxy的封裝,實現更多創建代理實例的方法
使用方法:
總結一下就是,微軟爸爸給我們的這個輪子還是即輕便又很好用的。
本文的實例代碼可以在我的github上找到:https://github.com/ElderJames/CoreProxy
原文鏈接:https://www.cnblogs.com/ElderJames/p/implement-simple-Aop-using-a-dotnet-core-library-System-Reflection-DispatchProxy.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AspNetCore 中使用 Inent
- 下一篇: 当我们谈高性能时,我们谈些什么?(送书活