利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop
Aop即是面向切面編程,眾多Aop框架里Castle是最為人所知的,另外還有死去的Spring.NET,當(dāng)然,.NET Core社區(qū)新秀AspectCore在性能與功能上都非常優(yōu)秀,已經(jīng)逐漸被社區(qū)推崇和有越來(lái)越多的人使用。感謝檸檬同學(xué)的禮物!
如果大家出于自身需求或者學(xué)習(xí),想實(shí)現(xiàn)一個(gè)Aop,是不是覺(jué)得一來(lái)就要使用Emit去做?最近我了解到了System.Reflection.DispatchProxy這個(gè)corefx類庫(kù),已經(jīng)實(shí)現(xiàn)了動(dòng)態(tài)代理功能。
下面演示一下它的使用方法:
System.Reflection.DispatchProxy只有一個(gè)Api,就是objecct Create<T,TProxy>() where TProxy:DispatchProxy,約束了只能傳入泛型參數(shù),并不能從方法傳入類型,這就會(huì)帶來(lái)很多問(wèn)題。而更可氣的是,給官方提了issue之后,還是不給增加這個(gè)api……
幸好,在那個(gè)issue下,issue作者提供了一個(gè)解決方案,就是用反射來(lái)構(gòu)造這個(gè)泛型方法。我還在這基礎(chǔ)上,封裝了一下,加入了傳入攔截器實(shí)例和傳入攔截器構(gòu)造方法參數(shù)的功能。
攔截器要實(shí)現(xiàn)這個(gè)接口,下面是對(duì)DispatchProxy的封裝,實(shí)現(xiàn)更多創(chuàng)建代理實(shí)例的方法
使用方法:
總結(jié)一下就是,微軟爸爸給我們的這個(gè)輪子還是即輕便又很好用的。
本文的實(shí)例代碼可以在我的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社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AspNetCore 中使用 Inent
- 下一篇: .NET Core 跨平台物联网框架 S