Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 22873|Odgovoriti: 0

[Vir] .NET/C# implementira AOP preko Autofac in DynamicProxy

[Kopiraj povezavo]
Objavljeno na 4. 11. 2017 12:21:23 | | | |
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:







Prejšnji:VS2010 C# Izvorna koda orodja za zaprite vrata
Naslednji:JS-MD5 šifrirna funkcija
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com