Mikä on AOP? Baidu-tietosanakirjan siteeraus: AOP on lyhenne sanoista Aspect Oriented Programming (Aspect Oriented Programming), joka tarkoittaa: teknologiaa kasvokeskeiseen ohjelmointiin, jolla saavutetaan ohjelmatoimintojen yhtenäinen ylläpito esikäännösmenetelmien ja dynaamisten agenttien avulla ajonaikana. AOP:n toteuttamiseen on kaksi pääasiallista tapaa: toinen on staattinen implantointi käännösvaiheessa, etuna on korkea tehokkuus, haittana joustavuuden puute ja postsharp .netin alla on edustaja (tämä on veloitettu). Toinen menetelmä on dynaamiset välityspalvelimet, joilla on päinvastaiset edut ja haitat: dynaaminen proxyjen luominen kohdetyypille ja niiden sieppaaminen välityspalvelmien kautta. Mitä AOP voi tehdä, yleisiä käyttötapauksia ovat transaktioiden käsittely, lokitus jne. Puhutaanpa siitä, miten Autofac toteuttaa AOP:n, Autofac on erittäin hyvä IOC-kontti .netissä ja erittäin suorituskykyinen (tehokkain kontti .netissä), ja AOP on yksinkertaisesti tiikeri. Autofacin AOP toteutetaan Castle-projektin (myös kontti) ydinosan kautta nimeltä Autofac.Extras.DynamicProxy, joka nimensä mukaisesti toteutetaan dynaamisena välityspalvelimena.
Valmistelu ennen käyttöä:
Asenna Nuget-paketti Autofac, Autofac.Extras.DynamicProxy, ja kolme viitettä lisätään onnistuneen asennuksen jälkeen
Nyt se on virallisesti alkanut!
Vaihe 1: Luo torjuntahävittäjä
Alla on esimerkki yksinkertaisesta interseptorista, joka näyttää siepatun metodin nimen, parametrien listan ja palautustuloksen
Vaihe 2: Rekisteröi interseptori Autofac-konttiin
Torjuntakone on rekisteröitävä Aufofac-konttiin, joko torjuntatyypin tai nimen perusteella, mikä tekee torjuntamenetelmästä erilaisen (kuten myöhemmin käsitellään).
Nimen lisääminen rakentaja. Register(c => uusi CallLogger(Console.Out)). <IInterceptor>Nimetty ("lokikutsut");
Tyypin injektio rakentaja. Register(c => uusi CallLogger(Console.Out));
Vaihe 3: Ota torjuntalaite käyttöön
Interseptorin käyttöönottoon on kaksi pääasiallista tapaa: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors-menetelmä luo dynaamisesti rajapintavälityspalvelimen
EnableClassInterceptors-menetelmä luo kohdeluokan aliluokan proxy-luokan, ja tässä on huomattava, että se sieppaa vain virtuaalisen metodin ja ohittaa metodin
Ota Interceptor-näytekoodi käyttöön:
Vaihe 4: Ilmoita, minkä tyyppisen tyypin haluat siepata
On kaksi tapaa:
Ensimmäinen tyyppi: Lisää ominaisuusattribuutti tyypille
Toinen tyyppi on dynaaminen torjuntakoneen injektoiminen, kun rekisteröintityyppi siirretään konttiin
Vaihe 5: Testaa vaikutus
1. Proxy-sieppaus
Ympyräluokkakoodi:
2. Rajapinnan välityspalvelimen sieppaus
IShape-liitäntäkoodi:
Ympyräluokkakoodi:
|