PostSharp 這個(gè)靜態(tài)植入的aop框架我就不多說(shuō)了,在以前的aop文件,我們也嘗試用MSBuild+Mono.Cicel理解靜態(tài)植入AOP的原理。最近公司準(zhǔn)備購(gòu)買Postsharp做一些AOP,減少開(kāi)發(fā)是代碼量,至于選擇AOP相信也不用多說(shuō)。我也在今天重新了解了些Postsharp最新版更新,這陣子的博客更新也少了,所以準(zhǔn)備在MSBuild+Mono.Cicel的基礎(chǔ)上再一些Postsharp系列。今天既然是初見(jiàn),那么我們就從最簡(jiǎn)單的OnExceptionAspect開(kāi)始。
一:OnExceptionAspect
起定義如下:
先寫(xiě)Aspect Attribute:
- View
- Serializable
- public
- public
- "時(shí)間[{0:yyyy年MM月dd日 HH時(shí)mm分}]方法{1}發(fā)生異常: {2}\n{3}"Name
- Continue
- public
- return
注意Postsharp的Aspect都需要標(biāo)記為可序列化的,因?yàn)樵诰幾g時(shí)會(huì)為我們二進(jìn)制序列化為資源,減少在運(yùn)行是的開(kāi)銷,這個(gè)將在后面專門講。
上面的code繼承至OnExceptionAspect,并且override OnException和GetExceptionType,GetExceptionType為我們需要處理的特定異常。OnException為異常處理決策方法。我們的異常處理決策是當(dāng)NullReferenceException時(shí)候我們會(huì)記錄日志,并且方法指定繼續(xù)(args.FlowBehavior = FlowBehavior.Continue)。
看看我們的測(cè)試代碼:
- View
- static
- Read
- publicstatic
- null
- publicstatic
- "exception"
很顯然我們的兩個(gè)方法拋出了null異常和自定義異常,預(yù)期是NullReferenceException會(huì)被撲捉,而自定義異常會(huì)中斷,運(yùn)行效果如下:
我們?cè)趤?lái)看看postsharp為我們做了什么,當(dāng)然是反編譯看看:
二:Postsharp的Multicasting
1:Multicasting class:
在這隨便也說(shuō)一下postsharp的Multicasting,多播這樣翻譯感覺(jué)有點(diǎn)死板呵呵,理解就行。利用這一點(diǎn)我們可以吧我們的aspect放在class,assembly等目標(biāo)上匹配我們的多個(gè)目標(biāo)。比如現(xiàn)在我們不想在我們的每個(gè)方法上加attribute,那我們可以選擇在class上,如:
反編譯,同樣注入了我們每個(gè)方法:
2:Multicasting assembly:
我們同樣可以利用
[assembly: PostSharpDemo.ExceptionAspectDemoAttribute()]
標(biāo)記在我們的程序集上。
3:AttributeExclude:
但是注意這樣也標(biāo)記了我們的aspect,某些時(shí)候可能會(huì)導(dǎo)致堆棧溢出 ,我們可以用AttributeExclude=true來(lái)排除。
同時(shí)我們也可以設(shè)置應(yīng)用目標(biāo):AttributeTargetMemberAttributes是一個(gè)枚舉類型,定義如下:
比如我們需要過(guò)濾編譯時(shí)候生成的目標(biāo)(自動(dòng)屬性,action等等),
[assembly: PostSharpDemo1.MethodTraceAspect(AttributeExclude = true, AttributePriority = 0, AttributeTargetMemberAttributes = MulticastAttributes.CompilerGenerated)]另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。