Hva er AOP? Sitat fra Baidu-encyclopedia: AOP er forkortelsen for Aspect Oriented Programming, som betyr: en teknologi for ansiktsorientert programmering for å oppnå enhetlig vedlikehold av programfunksjoner gjennom pre-kompileringsmetoder og dynamiske agenter under kjøring. Det finnes to hovedmåter å implementere AOP på: den ene er statisk implantasjon ved kompilering, fordelen er høy effektivitet, ulempen er mangel på fleksibilitet, og postsharp under .net er representanten (dette er ladd). Den andre metoden er dynamiske proxyer, som har motsatte fordeler og ulemper av førstnevnte, og dynamisk oppretter proxyer for måltypen og avskjærer dem gjennom proxy-anrop. Hva AOP kan gjøre, vanlige bruksområder er transaksjonsbehandling, logging osv. La oss snakke om hvordan Autofac implementerer AOP, Autofac er en veldig god IOC-container under .net og veldig god ytelse (den mest effektive containeren under .net), pluss at AOP rett og slett er en tiger. Autofacs AOP er implementert gjennom kjernen i Castle-prosjektet (også en container) kalt Autofac.Extras.DynamicProxy, som, som navnet antyder, er implementert som en dynamisk proxy.
Forberedelse før bruk:
Installer Nuget-pakken Autofac, Autofac.Extras.DynamicProxy, og tre referanser vil bli lagt til etter vellykket installasjon
Nå har det offisielt startet!
Trinn 1: Lag en avskjæringsenhet
Nedenfor er et eksempel på en enkel interceptor som viser navnet på den avlyttede metoden, en liste over parametere og returresultatet
Trinn 2: Registrer avskjæreren i Autofac-containeren
Interceptoren må registreres i Aufofac-containeren, enten etter interceptortype eller navn, noe som gjør metoden for bruk av interceptoren annerledes (som diskutert senere).
Navneinjeksjon Byggmester. Register(c => ny CallLogger(Console.Out)). Navngitt <IInterceptor>("log-calls");
Typeinjeksjon Byggmester. Register(c => ny CallLogger(Console.Out));
Trinn 3: Aktiver avskjæreren
Det finnes to hovedmåter å aktivere interceptoren på: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors-metoden oppretter dynamisk en grensesnittproxy
EnableClassInterceptors-metoden vil opprette en underklasseproxy-klasse av målklassen, og det bør bemerkes at den kun vil avskjære den virtuelle metoden og overstyre metoden
Aktiver eksempelkode for Interceptor:
Trinn 4: Angi typen du vil avskjære
Det finnes to måter:
Den første typen: Legg til et funksjonsattributt til typen
Den andre typen er å dynamisk injisere interceptoren når registreringstypen overføres til beholderen
Trinn 5: Test effekten
1. Proxy-avskjæring
Sirkelklassekode:
2. Grensesnittproxy-avskjæring
IShape-grensesnittkode:
Sirkelklassekode:
|