什么是AOP?引用百度百科:AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。實(shí)現(xiàn)AOP主要由兩種方式,一種是編譯時(shí)靜態(tài)植入,優(yōu)點(diǎn)是效率高,缺點(diǎn)是缺乏靈活性,.net下postsharp為代表者(這個(gè)是收費(fèi)的)。另一種方式是動態(tài)代理,優(yōu)缺點(diǎn)與前者相反,動態(tài)為目標(biāo)類型創(chuàng)建代理,通過代理調(diào)用實(shí)現(xiàn)攔截。AOP能做什么,常見的用例是事務(wù)處理、日志記錄等等。下面就講講Autofac怎么實(shí)現(xiàn)AOP,Autofac是一個(gè).net下非常優(yōu)秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP簡直是如虎添翼。Autofac的AOP是通過Castle(也是一個(gè)容器)項(xiàng)目的核心部分實(shí)現(xiàn)的,名為Autofac.Extras.DynamicProxy,顧名思義,其實(shí)現(xiàn)方式為動態(tài)代理。
使用前的準(zhǔn)備:
通過Nuge安裝程序包 :Autofac、Autofac.Extras.DynamicProxy,安裝成功之后會增加三個(gè)引用
下面正式開始了!
第一步:創(chuàng)建攔截器
下面是一個(gè)簡單的攔截器示例,該攔截器的功能是顯示被攔截的方法名稱、參數(shù)列表和返回結(jié)果
1 /// <summary> 2 /// 攔截器 需要實(shí)現(xiàn) IInterceptor接口 Intercept方法 3 /// </summary> 4 public class CallLogger: IInterceptor 5 { 6 TextWriter _output; 7 8 public CallLogger(TextWriter output) 9 {10 _output = output;11