Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 22873|Antwoord: 0

[Bron] .NET/C# implementeert AOP via Autofac en DynamicProxy

[Link kopiëren]
Geplaatst op 04-11-2017 12:21:23 | | | |
Wat is AOP? Citaat uit de Baidu Encyclopedie: AOP is de afkorting van Aspect Oriented Programming, wat betekent: een technologie voor face-oriented programming om uniforme onderhoudsfuncties van programma's te bereiken via pre-compilatiemethoden en dynamische agenten tijdens runtime. Er zijn twee hoofdmanieren om AOP te implementeren: de ene is statische implantatie tijdens het compileren tijd, het voordeel is hoge efficiëntie, het nadeel is gebrek aan flexibiliteit, en postsharp onder .net is de representatieve (dit is belast). De andere methode zijn dynamische proxies, die de tegenovergestelde voordelen en nadelen hebben van de eerste, namelijk het dynamisch creëren van proxies voor het doeltype en deze onderscheppen via proxy calls. Wat AOP kan, veelvoorkomende gebruikssituaties zijn transactieverwerking, logging, enzovoort. Laten we het hebben over hoe Autofac AOP implementeert, Autofac is een zeer goede IOC-container onder .net en heeft zeer goede prestaties (de meest efficiënte container onder .net), plus AOP is gewoon een tijger. De AOP van Autofac wordt geïmplementeerd via het kerngedeelte van het Castle-project (ook een container), genaamd Autofac.Extras.DynamicProxy, dat, zoals de naam al doet vermoeden, als een dynamische proxy is geïmplementeerd.

Voorbereiding vóór gebruik:

Installeer het Nuget-pakket Autofac, Autofac.Extras.DynamicProxy, en na succesvolle installatie worden drie referenties toegevoegd


Nu is het officieel begonnen!



Stap 1: Maak een onderschepper aan

Hieronder staat een voorbeeld van een eenvoudige interceptor die de naam van de onderschepte methode, een lijst met parameters en het retourresultaat weergeeft.

Stap 2: Registreer de interceptor in de Autofac-container

De interceptor moet geregistreerd zijn in de Aufofac-container, hetzij op interceptortype, hetzij op naam, wat de methode van het gebruik van de interceptor anders maakt (zoals later besproken).


Naaminjectie
Bouwer. Register(c => nieuwe CallLogger(Console.Out)). Named <IInterceptor>("log-calls");

Type-injectie
Bouwer. Register(c => nieuwe CallLogger(Console.Out));


Stap 3: Schakel de onderschepper in

Er zijn twee hoofdmanieren om de interceptor te activeren: EnableInterfaceInterceptors(), EnableClassInterceptors().

De EnableInterfaceInterceptors-methode creëert dynamisch een interfaceproxy

De EnableClassInterceptors-methode zal een subklasse-proxyklasse van de doelklasse aanmaken, en het moet hier worden opgemerkt dat deze alleen de virtuele methode zal onderscheppen en de methode overschrijft

Schakel Interceptor voorbeeldcode in:


Stap 4: Geef aan welk type je wilt onderscheppen

Er zijn twee manieren:

Het eerste type: Voeg een feature-attribuut toe aan het type




Het tweede type is het dynamisch injecteren van de interceptor wanneer het registratietype naar de container wordt overgedragen


Stap 5: Test het effect

1. Proxy-onderschepping



Cirkelklassecode:



2. Interface proxy-onderschepping



IShape Interface Code:

Cirkelklassecode:







Vorig:VS2010 C# Close Port Tool broncode
Volgend:JS-MD5 encryptiefunctie
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com