Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 22873|Odpoveď: 0

[Zdroj] .NET/C# implementuje AOP prostredníctvom Autofac a DynamicProxy

[Kopírovať odkaz]
Zverejnené 4. 11. 2017 12:21:23 | | | |
Č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:







Predchádzajúci:Zdrojový kód nástroja VS2010 C# Close Port Tool
Budúci:Šifrovacia funkcia JS-MD5
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com