Mi az az AOP? Idézve a Baidu Enciklopédiát: Az AOP az Aspektusorientált Programozás rövidítése, ami azt jelenti: egy olyan technológiát az arcorientált programozáshoz, amely lehetővé teszi a programfunkciók egységes karbantartását elő-kompilációs módszerek és dinamikus ügynökök révén a futás során. Az AOP megvalósításának két fő módja van: az egyik a statikus implantáció fordítási időben: az előnye a magas hatékonyság, hátránya a rugalmasság hiánya, és a .net alatt a postsharp a képviselő (ez díjazott). A másik módszer a dinamikus proxyk, amelyeknek ellentétes előnyei és hátrányai vannak, például dinamikusan hoznak létre proxykat a célpont típus számára, és proxy hívásokon keresztül fogják el őket. Az AOP által megszokott felhasználási esetek a tranzakciófeldolgozás, naplózás stb. Beszéljünk arról, hogyan valósítja meg az Autofac az AOP-ot, az Autofac egy nagyon jó IOC konténer .net alatt, és nagyon jó teljesítmény (a leghatékonyabb konténer .net alatt), ráadásul az AOP egyszerűen egy tigris. Az Autofac AOP-ját a Castle (szintén egy konténer) projekt mag része, az Autofac.Extras.DynamicProxy révén valósítják meg, amely, ahogy a neve is mutatja, dinamikus proxyként van megvalósítva.
Előkészítés használat előtt:
Telepítsd a Nuget csomagot Autofac, Autofac.Extras.DynamicProxy, és a sikeres telepítés után három hivatkozás kerül hozzá
Most hivatalosan is elkezdődött!
1. lépés: Létrehozz egy elfogót
Az alábbiakban egy egyszerű interceptor példája látható, amely megjeleníti az elfogott metódus nevét, a paraméterek listáját és a visszaküldési eredményt
2. lépés: Regisztrálni az elfogót az Autofac konténerbe
Az elfogót az Aufofac konténerben kell regisztrálni, akár elfogó típus, akár név szerint, ami megkülönbözteti az elfogó használatát (ahogy később tárgyalják).
Névbeépítés Építő. Register(c => új CallLogger(Console.Out)). Név <IInterceptor>("naplóhívások");
Típusbefecskendezés Építő. Register(c => új CallLogger(Console.Out));
3. lépés: Kapcsold be az elfogó gépet
Két fő módja van az elfogó engedélyezésének: EnableInterfaceInterceptors(), EnableClassInterceptors().
Az EnableInterfaceInterceptors módszer dinamikusan hoz létre egy interfész proxyt
Az EnableClassInterceptors metódus létrehoz egy alosztály proxy osztályt a célosztályból, és itt meg kell jegyezni, hogy csak a virtuális metódust fogja el és felülírja a metódust.
Engedélyezd az Interceptor mintakódot:
4. lépés: Jelöld meg, melyik típust szeretnéd elfogni
Kétféle módja van:
Az első típus: Hozzáadj egy tulajdonság attribútumot a típushoz
A második típus dinamikusan injektálja az elfogót, amikor a regisztrációs típust áthelyezik a konténerbe
5. lépés: Tesztelje a hatást
1. Proxy interception
Circle osztálykód:
2. Interfész proxy elhallgatása
IShape interfész kód:
Circle osztálykód:
|