Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 22873|Svar: 0

[Källa] .NET/C# implementerar AOP via Autofac och DynamicProxy

[Kopiera länk]
Publicerad på 2017-11-04 12:21:23 | | | |
Vad är AOP? Citat från Baidu-encyklopedin: AOP är förkortningen för Aspect Oriented Programming, vilket betyder: en teknik för ansiktsorienterad programmering för att uppnå enhetligt underhåll av programfunktioner genom förkompileringsmetoder och dynamiska agenter under körning. Det finns två huvudsakliga sätt att implementera AOP, det ena är statisk implantation vid kompilering, fördelen är hög effektivitet, nackdelen är brist på flexibilitet, och postsharp under .net är representativ (detta är laddat). Den andra metoden är dynamiska proxyer, som har motsatta fördelar och nackdelar jämfört med den förra, och skapar dynamiskt proxyer för måltypen och avlyssnar dem genom proxysamtal. Vad AOP kan göra, vanliga användningsområden är transaktionshantering, loggning osv. Låt oss prata om hur Autofac implementerar AOP, Autofac är en mycket bra IOC-container under .net och mycket bra prestanda (den mest effektiva containern under .net), plus att AOP helt enkelt är en tiger. Autofacs AOP implementeras genom kärndelen av Castle-projektet (även det en container) kallat Autofac.Extras.DynamicProxy, som, som namnet antyder, är implementerat som en dynamisk proxy.

Förberedelse före användning:

Installera Nuget-paketet Autofac, Autofac.Extras.DynamicProxy, och tre referenser kommer att läggas till efter en lyckad installation


Nu har det officiellt startat!



Steg 1: Skapa en interceptor

Nedan är ett exempel på en enkel interceptor som visar namnet på den avlyssnade metoden, en lista med parametrar och returresultatet

Steg 2: Registrera interceptorn i Autofac-containern

Interceptorn måste registreras i Aufofac-containern, antingen efter interceptortyp eller namn, vilket gör metoden för att använda interceptorn annorlunda (som diskuteras senare).


Namninjektion
byggare. Register(c => ny CallLogger(Console.Out)). <IInterceptor>Namngivna ("log-calls");

Typinjektion
byggare. Register(c => nya CallLogger(Console.Out));


Steg 3: Aktivera interceptorn

Det finns två huvudsakliga sätt att aktivera interceptorn: EnableInterfaceInterceptors(), EnableClassInterceptors().

Metoden EnableInterfaceInterceptors skapar dynamiskt en gränssnittsproxy

EnableClassInterceptors-metoden skapar en subklassproxyklass av målklassen, och det bör noteras här att den endast kommer att intercepta den virtuella metoden och åsidosätta metoden

Aktivera exempelkod för Interceptor:


Steg 4: Ange vilken typ du vill avlyssna

Det finns två sätt:

Den första typen: Lägg till ett funktionsattribut till typen




Den andra typen är att dynamiskt injicera interceptorn när registreringstypen överförs till behållaren


Steg 5: Testa effekten

1. Proxy-avlyssning



Cirkelklasskod:



2. Gränssnittsproxy-avlyssning



IShape-gränssnittskod:

Cirkelklasskod:







Föregående:VS2010 C# Close Port Tool-källkod
Nästa:JS-MD5-krypteringsfunktion
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com