Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 22873|Svare: 0

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

[Kopier lenke]
Publisert på 04.11.2017 12:21:23 | | | |
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:







Foregående:VS2010 C# Close Port Tool kildekode
Neste:JS-MD5 krypteringsfunksjon
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com