Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 22873|Odpověď: 0

[Zdroj] .NET/C# implementuje AOP prostřednictvím Autofac a DynamicProxy

[Kopírovat odkaz]
Zveřejněno 04.11.2017 12:21:23 | | | |
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:







Předchozí:Zdrojový kód nástroje VS2010 C# Close Port Tool
Další:Šifrovací funkce JS-MD5
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com