Ce este AOP? Citând Baidu Encyclopedia: AOP este abrevierea de la Aspect Oriented Programming, care înseamnă: o tehnologie pentru programare orientată pe față pentru a realiza întreținerea unificată a funcțiilor programului prin metode de precompilare și agenți dinamici în timpul rulării. Există două moduri principale de a implementa AOP: unul este implantarea statică la compilare, avantajul este eficiența ridicată, dezavantajul lipsa flexibilității, iar postsharp sub .net este reprezentantul (acesta este taxat). Cealaltă metodă sunt proxy-urile dinamice, care au avantajele și dezavantajele opuse primului, creând dinamic proxy-uri pentru tipul țintă și interceptându-le prin apeluri proxy. Ce poate face AOP, cazuri de utilizare comune, sunt procesarea tranzacțiilor, logarea etc. Să vorbim despre cum implementează Autofac AOP, Autofac este un container IOC foarte bun sub .net și performanță foarte bună (cel mai eficient container din .net), plus că AOP este pur și simplu un tigru. AOP-ul Autofac este implementat prin partea de bază a proiectului Castle (de asemenea un container) numită Autofac.Extras.DynamicProxy, care, după cum sugerează și numele, este implementat ca un proxy dinamic.
Pregătire înainte de utilizare:
Instalează pachetul Nuget Autofac, Autofac.Extras.DynamicProxy și trei referințe vor fi adăugate după instalarea cu succes
Acum a început oficial!
Pasul 1: Creează un interceptor
Mai jos este un exemplu de interceptor simplu care afișează numele metodei interceptate, o listă de parametri și rezultatul returnat
Pasul 2: Înregistrează interceptorul în containerul Autofac
Interceptorul trebuie să fie înregistrat în containerul Aufofac, fie după tipul interceptorului, fie după nume, ceea ce face ca metoda de utilizare a interceptorului să fie diferită (așa cum se discută mai târziu).
Injectarea numelor Constructor. Register(c => noul CallLogger(Console.Out)). <IInterceptor>Denumit ("apeluri de jurnal");
Injecție tip Constructor. Register(c => noul CallLogger(Console.Out));
Pasul 3: Activează interceptorul
Există două moduri principale de a activa interceptorul: EnableInterfaceInterceptors(), EnableClassInterceptors().
Metoda EnableInterfaceInterceptors creează dinamic un proxy de interfață
Metoda EnableClassInterceptors va crea o subclasă proxy a clasei țintă și trebuie menționat aici că aceasta va intercepta doar metoda virtuală și va suprascrie metoda
Activează codul exemplu Interceptor:
Pasul 4: Indică tipul pe care vrei să-l interceptezi
Există două moduri:
Primul tip: Adaugă un atribut de caracteristică la tip
Al doilea tip este injectarea dinamică a interceptorului atunci când tipul de înregistrare este transferat către container
Pasul 5: Testează efectul
1. Interceptarea prin procură
Cod de clasă Circle:
2. Interceptarea proxy-ului de interfață
Cod interfață IShape:
Cod de clasă Circle:
|