Mis on AOP? Tsitaat Baidu entsüklopeediale: AOP on lühend väljendist aspektipõhine programmeerimine, mis tähendab: tehnoloogiat näopõhiseks programmeerimiseks, mis võimaldab programmi funktsioonide ühtset hooldust eelkompileerimismeetodite ja dünaamiliste agentide abil käitusajal. AOP rakendamiseks on kaks peamist viisi: üks on staatiline implanteerimine kompileerimise ajal, eeliseks on kõrge efektiivsus, puuduseks on paindlikkuse puudumine ja postsharp .net all on esindaja (see on tasuline). Teine meetod on dünaamilised proksid, millel on vastupidised eelised ja puudused kui esimestel – dünaamiliselt luuakse proksisid sihttüübile ja püütakse neid proksikõnede kaudu. Mida AOP suudab teha, on tavalised kasutusjuhtumid tehingute töötlemine, logimine jne. Räägime, kuidas Autofac rakendab AOP-i, Autofac on väga hea IOC konteiner .net all ja väga hea jõudlus (kõige tõhusam konteiner .net all), lisaks on AOP lihtsalt tiiger. Autofaci AOP on teostatud Castle'i (ka konteiner) projekti põhiosa Autofac.Extras.DynamicProxy kaudu, mis, nagu nimigi ütleb, on rakendatud dünaamilise proxyna.
Ettevalmistus enne kasutamist:
Paigalda Nuget pakett Autofac, Autofac.Extras.DynamicProxy ning pärast edukat paigaldust lisatakse kolm viidet
Nüüd on see ametlikult alanud!
1. samm: Loo interceptor
Allpool on näide lihtsast interceptorist, mis kuvab pealtkuulatud meetodi nime, parameetrite nimekirja ja tagastustulemuse
2. samm: Registreeri interceptor Autofaci konteinerisse
Interceptor peab olema registreeritud Aufofaci konteineris, kas hävitaja tüübi või nime järgi, mis muudab püüduri kasutamise meetodi erinevaks (nagu hiljem käsitletakse).
Nime süstimine Ehitaja. Register(c => uus CallLogger (Console.Out)). <IInterceptor>Nimega ("log-calls");
Tüüpsüstimine Ehitaja. Register(c => uus CallLogger(Console.Out));
3. samm: Lülita interceptor sisse
Interceptori aktiveerimiseks on kaks peamist viisi: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors meetod loob dünaamiliselt liidese proxy
EnableClassInterceptors meetod loob sihtklassi alamklassi proxy-klassi ning siin tuleb märkida, et see püüab kinni ainult virtuaalse meetodi ja ületab meetodi
Luba Interceptori näidiskood:
4. samm: Märgi, millist tüüpi soovid kinni püüda
On kaks võimalust:
Esimene tüüp: Lisa tüübile tunnuse atribuut
Teine tüüp on interceptorile dünaamiline süstimine, kui registreerimistüüp kantakse konteinerisse
5. samm: Testi mõju
1. Proxy vaheltlõige
Ringklassi kood:
2. Liidese proxy pealtkuulamine
IShape liidese kood:
Ringklassi kood:
|