Čo je AOP? Citujúc Baidu Encyclopedia: AOP je skratka pre aspektovo orientované programovanie, čo znamená: technológiu pre tvárovo orientované programovanie na dosiahnutie jednotnej údržby programových funkcií prostredníctvom predkompilačných metód a dynamických agentov počas behu. Existujú dva hlavné spôsoby implementácie AOP: jeden je statická implantácia pri kompilácii, výhodou je vysoká efektivita, nevýhodou je nedostatok flexibility a postsharp pod .net je reprezentatívny (to je účtované). Druhou metódou sú dynamické proxy, ktoré majú opačné výhody a nevýhody ako prvé – dynamicky vytvárajú proxy pre typ cieľa a zachytávajú ich prostredníctvom proxy volaní. Čo AOP dokáže, bežné prípady použitia sú spracovanie transakcií, logovanie a podobne. Poďme sa porozprávať o tom, ako Autofac implementuje AOP, Autofac je veľmi dobrý IOC kontajner pod .net a má veľmi dobrý výkon (najefektívnejší kontajner pod .net), navyše AOP je jednoducho tiger. AOP Autofac je implementovaný prostredníctvom jadra projektu Castle (tiež kontajnera) nazvaného Autofac.Extras.DynamicProxy, ktorý, ako názov napovedá, je implementovaný ako dynamický proxy.
Príprava pred použitím:
Nainštalujte balík Nuget Autofac, Autofac.Extras.DynamicProxy, a po úspešnej inštalácii budú pridané tri referencie
Teraz to oficiálne začalo!
Krok 1: Vytvorte interceptor
Nižšie je príklad jednoduchého interceptora, ktorý zobrazuje názov zachytenej metódy, zoznam parametrov a výsledok návratu
Krok 2: Zaregistrujte interceptor do kontajnera Autofac
Interceptor musí byť registrovaný v kontajneri Aufofac, buď podľa typu interceptora alebo podľa mena, čo spôsobuje odlišnosť spôsobu použitia interceptora (ako bude uvedené neskôr).
Injektácia názvov staviteľ. Register(c => nový CallLogger(Console.Out)). Menované <IInterceptor>("log-calls");
Typová injekcia staviteľ. Register(c => nový CallLogger(Console.Out));
Krok 3: Povolte interceptor
Existujú dva hlavné spôsoby, ako povoliť interceptor: EnableInterfaceInterceptors(), EnableClassInterceptors().
Metóda EnableInterfaceInterceptors dynamicky vytvára proxy rozhrania
Metóda EnableClassInterceptors vytvorí triedu proxy podtriedy cieľovej triedy a treba poznamenať, že zachytí iba virtuálnu metódu a prepíše ju
Povolte vzorový kód Interceptora:
Krok 4: Označte typ, ktorý chcete zachytiť
Existujú dva spôsoby:
Prvý typ: Pridať atribút vlastnosti k typu
Druhým typom je dynamické vstreknutie interceptora pri prenose registračného typu do kontajnera
Krok 5: Otestujte účinok
1. Proxy zachytenie
Kód triedy kruhu:
2. Zachytávanie proxy rozhrania
IShape kód rozhrania:
Kód triedy kruhu:
|