Kaj je AOP? Citiramo Baidujevo enciklopedijo: AOP je okrajšava za Aspect Oriented Programming, kar pomeni: tehnologijo za obrazno usmerjeno programiranje za doseganje enotnega vzdrževanja programskih funkcij s predkompilacijskimi metodami in dinamičnimi agenti med izvajanjem. Obstajata dva glavna načina implementacije AOP: eden je statična implantacija ob prevajanju, prednost je visoka učinkovitost, slabost je pomanjkanje prilagodljivosti, in postsharp pod .net je predstavnik (ta je zaračunan). Druga metoda so dinamični proxyji, ki imajo nasprotne prednosti in slabosti od prvega, saj dinamično ustvarjajo proxyje za tip cilja in jih prestrezajo preko proxy klicev. Kar lahko naredi AOP, so pogosti primeri uporabe obdelava transakcij, beleženje itd. Poglejmo, kako Autofac implementira AOP, Autofac je zelo dober IOC kontejner pod .net in zelo dobro zmogljivost (najučinkovitejši vsebnik pod .net), poleg tega pa je AOP preprosto tiger. Autofacov AOP je implementiran prek jedrnega dela projekta Castle (prav tako vsebnik), imenovanega Autofac.Extras.DynamicProxy, ki je, kot že ime pove, implementiran kot dinamični proxy.
Priprava pred uporabo:
Namestite paket Nuget Autofac, Autofac.Extras.DynamicProxy, po uspešni namestitvi pa bodo dodane tri reference
Zdaj se je uradno začelo!
Korak 1: Ustvarite prestreznik
Spodaj je primer preprostega prestreznika, ki prikazuje ime prestrežene metode, seznam parametrov in povratni rezultat
Korak 2: Registrirajte prestreznik v zabojnik Autofac
Prestreznik mora biti registriran v Aufofac vsebniku, bodisi po tipu prestreznika ali po imenu, kar način uporabe prestreznika razlikuje (kot bo obravnavano kasneje).
Vbrizgavanje imen graditelj. Register(c => novi CallLogger(Console.Out)). Poimenovani <IInterceptor>("log-calls");
Vbrizgavanje tipov graditelj. Register(c => novi CallLogger(Console.Out));
Korak 3: Omogočite prestreznik
Obstajata dva glavna načina za omogočanje prestreznika: EnableInterfaceInterceptors(), EnableClassInterceptors().
Metoda EnableInterfaceInterceptors dinamično ustvarja vmesni proxy
Metoda EnableClassInterceptors bo ustvarila proxy razred podrazreda ciljnega razreda, pri čemer je treba poudariti, da bo prestregla le virtualno metodo in jo preglasila
Omogočite vzorčno kodo Interceptorja:
Korak 4: Določite, katero vrsto želite prestreči
Obstajata dva načina:
Prva vrsta: Dodajte atribut značilnosti k tipu
Druga vrsta je dinamično vbrizgavanje prestreznika, ko se registracijska vrsta prenese v kontejner
Korak 5: Preizkusite učinek
1. Prestrezanje preko pooblaščenca
Koda razreda kroga:
2. Prestrezanje prek posrednikov vmesnika
IShape vmesniška koda:
Koda razreda kroga:
|