Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 22873|Svar: 0

[Kilde] .NET/C# implementerer AOP via Autofac og DynamicProxy

[Kopier link]
Opslået på 04/11/2017 12.21.23 | | | |
Hvad er AOP? Citat fra Baidu-encyklopædien: AOP er forkortelsen for Aspect Oriented Programming, som betyder: en teknologi til ansigtsorienteret programmering for at opnå samlet vedligeholdelse af programfunktioner gennem prækompilationsmetoder og dynamiske agenter under kørsel. Der er to hovedmåder at implementere AOP på: den ene er statisk implantation ved kompilering, fordelen er høj effektivitet, ulempen er manglende fleksibilitet, og postsharp under .net er repræsentativ (dette er opkrævet). Den anden metode er dynamiske proxyer, som har modsatte fordele og ulemper af førstnævnte, idet de dynamisk skaber proxies for måltypen og opsnapper dem gennem proxy-opkald. Hvad AOP kan, er almindelige anvendelsestilfælde transaktionsbehandling, logning osv. Lad os tale om, hvordan Autofac implementerer AOP, Autofac er en meget god IOC-container under .net og har meget god ydeevne (den mest effektive container under .net), plus AOP er simpelthen en tiger. Autofacs AOP implementeres gennem kernedelen af Castle-projektet (også en container) kaldet Autofac.Extras.DynamicProxy, som, som navnet antyder, er implementeret som en dynamisk proxy.

Forberedelse før brug:

Installer Nuget-pakken Autofac, Autofac.Extras.DynamicProxy, og tre referencer vil blive tilføjet efter vellykket installation


Nu er det officielt startet!



Trin 1: Opret en interceptor

Nedenfor er et eksempel på en simpel interceptor, der viser navnet på den opsnappede metode, en liste over parametre og returresultatet

Trin 2: Registrer interceptoren i Autofac-containeren

Interceptoren skal registreres i Aufofac-containeren, enten efter interceptortype eller efter navn, hvilket gør metoden til at bruge interceptoren anderledes (som diskuteret senere).


Navneinjektion
Bygger. Register(c => ny CallLogger(Console.Out)). Navngivet <IInterceptor>("log-calls");

Typeinjektion
Bygger. Register(c => ny CallLogger(Console.Out));


Trin 3: Aktiver aflytningsmaskinen

Der er to hovedmåder at aktivere interceptoren på: EnableInterfaceInterceptors(), EnableClassInterceptors().

EnableInterfaceInterceptors-metoden opretter dynamisk en interfaceproxy

EnableClassInterceptors-metoden vil oprette en subklasseproxy-klasse af målklassen, og det skal bemærkes, at den kun vil opsnappe den virtuelle metode og tilsidesætte metoden

Aktivér Interceptor eksempelkode:


Trin 4: Angiv typen, du vil opsnappe

Der er to måder:

Den første type: Tilføj en feature-attribut til typen




Den anden type er at injicere interceptoren dynamisk, når registreringstypen overføres til beholderen


Trin 5: Test effekten

1. Proxy-aflytning



Cirkelklassekode:



2. Interface proxy-aflytning



IShape-grænsefladekode:

Cirkelklassekode:







Tidligere:VS2010 C# Close Port Tool kildekode
Næste:JS-MD5 krypteringsfunktion
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com