Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 22873|Răspunde: 0

[Sursă] .NET/C# implementează AOP prin Autofac și DynamicProxy

[Copiază linkul]
Postat pe 04.11.2017 12:21:23 | | | |
Ce este AOP? Citând Baidu Encyclopedia: AOP este abrevierea de la Aspect Oriented Programming, care înseamnă: o tehnologie pentru programare orientată pe față pentru a realiza întreținerea unificată a funcțiilor programului prin metode de precompilare și agenți dinamici în timpul rulării. Există două moduri principale de a implementa AOP: unul este implantarea statică la compilare, avantajul este eficiența ridicată, dezavantajul lipsa flexibilității, iar postsharp sub .net este reprezentantul (acesta este taxat). Cealaltă metodă sunt proxy-urile dinamice, care au avantajele și dezavantajele opuse primului, creând dinamic proxy-uri pentru tipul țintă și interceptându-le prin apeluri proxy. Ce poate face AOP, cazuri de utilizare comune, sunt procesarea tranzacțiilor, logarea etc. Să vorbim despre cum implementează Autofac AOP, Autofac este un container IOC foarte bun sub .net și performanță foarte bună (cel mai eficient container din .net), plus că AOP este pur și simplu un tigru. AOP-ul Autofac este implementat prin partea de bază a proiectului Castle (de asemenea un container) numită Autofac.Extras.DynamicProxy, care, după cum sugerează și numele, este implementat ca un proxy dinamic.

Pregătire înainte de utilizare:

Instalează pachetul Nuget Autofac, Autofac.Extras.DynamicProxy și trei referințe vor fi adăugate după instalarea cu succes


Acum a început oficial!



Pasul 1: Creează un interceptor

Mai jos este un exemplu de interceptor simplu care afișează numele metodei interceptate, o listă de parametri și rezultatul returnat

Pasul 2: Înregistrează interceptorul în containerul Autofac

Interceptorul trebuie să fie înregistrat în containerul Aufofac, fie după tipul interceptorului, fie după nume, ceea ce face ca metoda de utilizare a interceptorului să fie diferită (așa cum se discută mai târziu).


Injectarea numelor
Constructor. Register(c => noul CallLogger(Console.Out)). <IInterceptor>Denumit ("apeluri de jurnal");

Injecție tip
Constructor. Register(c => noul CallLogger(Console.Out));


Pasul 3: Activează interceptorul

Există două moduri principale de a activa interceptorul: EnableInterfaceInterceptors(), EnableClassInterceptors().

Metoda EnableInterfaceInterceptors creează dinamic un proxy de interfață

Metoda EnableClassInterceptors va crea o subclasă proxy a clasei țintă și trebuie menționat aici că aceasta va intercepta doar metoda virtuală și va suprascrie metoda

Activează codul exemplu Interceptor:


Pasul 4: Indică tipul pe care vrei să-l interceptezi

Există două moduri:

Primul tip: Adaugă un atribut de caracteristică la tip




Al doilea tip este injectarea dinamică a interceptorului atunci când tipul de înregistrare este transferat către container


Pasul 5: Testează efectul

1. Interceptarea prin procură



Cod de clasă Circle:



2. Interceptarea proxy-ului de interfață



Cod interfață IShape:

Cod de clasă Circle:







Precedent:Cod sursă VS2010 C# Close Port Tool
Următor:Funcția de criptare JS-MD5
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com