Co je to AOP? Cituji Baidu Encyclopedia: AOP je zkratka pro aspektově orientované programování, což znamená: technologii pro programování orientované na obličej, která umožňuje jednotnou údržbu programových funkcí prostřednictvím metod předkompilace a dynamických agentů během běhu. Existují dva hlavní způsoby implementace AOP: jeden je statická implantace při kompilaci, výhodou je vysoká efektivita, nevýhodou je nedostatek flexibility a postsharp pod .net je reprezentativní (to je účtováno za poplatek). Druhou metodou jsou dynamické proxy, které mají opačné výhody a nevýhody než první, dynamicky vytvářejí proxy pro typ cíle a zachytávají je prostřednictvím proxy hovorů. Co AOP umí – běžné případy použití jsou zpracování transakcí, logování atd. Pojďme si povědět o tom, jak Autofac implementuje AOP, Autofac je velmi dobrý IOC kontejner pod .net a má velmi dobrý výkon (nejefektivnější kontejner pod .net), navíc AOP je prostě tygr. AOP Autofac je implementován prostřednictvím jádrové části projektu Castle (také kontejner) nazvané Autofac.Extras.DynamicProxy, která, jak název napovídá, je implementována jako dynamický proxy.
Příprava před použitím:
Nainstalujte balíček Nuget Autofac, Autofac.Extras.DynamicProxy, a po úspěšné instalaci budou přidány tři reference
Teď to oficiálně začalo!
Krok 1: Vytvořte interceptor
Níže je příklad jednoduchého interceptoru, který zobrazuje název zachycené metody, seznam parametrů a návratový výsledek
Krok 2: Zaregistrujte interceptor do kontejneru Autofac
Interceptor musí být registrován v kontejneru Aufofac, buď podle typu interceptoru, nebo podle jména, což způsobuje odlišnost způsobu použití interceptoru (jak bude popsáno později).
Injekce názvu stavitel. Register(c => nový CallLogger(Console.Out)). Pojmenované <IInterceptor>("log-calls");
Vstřikování typů stavitel. Register(c => nový CallLogger(Console.Out));
Krok 3: Povolte interceptor
Existují dva hlavní způsoby, jak interceptor povolit: EnableInterfaceInterceptors(), EnableClassInterceptors().
Metoda EnableInterfaceInterceptors dynamicky vytváří rozhraní proxy
Metoda EnableClassInterceptors vytvoří proxy třídu podtřídy cílové třídy a je třeba poznamenat, že pouze virtuální metodu zachytí a přepíše ji
Povolte ukázkový kód Interceptoru:
Krok 4: Uveďte typ, který chcete zachytit
Existují dva způsoby:
První typ: Přidat atribut vlastnosti k typu
Druhý typ je dynamické vstřikování interceptoru při převodu registračního typu do kontejneru
Krok 5: Otestujte účinek
1. Zástupné zachycení
Kód třídy kruhu:
2. Zachycení pomocí rozhraní
IShape Interface Code:
Kód třídy kruhu:
|