Kas yra AOP? Cituojant Baidu enciklopediją: AOP yra į aspektą orientuoto programavimo santrumpa, o tai reiškia: į veidą orientuoto programavimo technologija, skirta pasiekti vieningą programos funkcijų palaikymą naudojant išankstinio kompiliavimo metodus ir dinaminius agentus vykdymo metu. Yra du pagrindiniai AOP įgyvendinimo būdai, vienas yra statinis implantavimas kompiliavimo metu, privalumas yra didelis efektyvumas, trūkumas yra lankstumo trūkumas, o postsharp pagal .net yra atstovas (tai yra apmokestinama). Kitas metodas yra dinaminiai tarpiniai serveriai, kurie turi priešingus privalumus ir trūkumus nei pirmieji, dinamiškai kuriant tikslinio tipo tarpinius serverius ir perimant juos per tarpinio serverio skambučius. Ką gali padaryti AOP, dažniausi naudojimo atvejai yra operacijų apdorojimas, registravimas ir kt. Pakalbėkime apie tai, kaip Autofac įgyvendina AOP, Autofac yra labai geras IOC konteineris pagal .net ir labai geras našumas (efektyviausias konteineris pagal .net), plius AOP yra tiesiog tigras. "Autofac" AOP įgyvendinamas per pagrindinę "Castle" (taip pat konteinerio) projekto dalį, vadinamą "Autofac.Extras.DynamicProxy", kuris, kaip rodo pavadinimas, įgyvendinamas kaip dinaminis tarpinis serveris.
Paruošimas prieš naudojimą:
Įdiekite Nuget paketą Autofac, Autofac.Extras.DynamicProxy, ir po sėkmingo įdiegimo bus pridėtos trys nuorodos
Dabar jis oficialiai prasidėjo!
1 veiksmas: sukurkite perėmėją
Žemiau pateikiamas paprasto perėmėjo pavyzdys, kuriame rodomas perimto metodo pavadinimas, parametrų sąrašas ir grąžinamas rezultatas
2 veiksmas: užregistruokite perėmėją Autofac konteineryje
Perėmėjas turi būti užregistruotas Aufofac talpykloje pagal perėmėjo tipą arba pavadinimą, todėl perėmėjo naudojimo būdas skiriasi (kaip aptarta vėliau).
Vardo injekcija statybininkas. Register(c => naujas CallLogger(Console.Out)). Named<IInterceptor>("log-calls");
Tipo įpurškimas statybininkas. Register(c => naujas CallLogger(Console.Out));
3 veiksmas: įgalinkite perėmėją
Yra du pagrindiniai būdai įgalinti perėmėją: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors metodas dinamiškai sukuria sąsajos tarpinį serverį
EnableClassInterceptors metodas sukurs tikslinės klasės poklasio tarpinio serverio klasę, ir čia reikia pažymėti, kad jis tik perims virtualų metodą ir nepaisys metodo
Įgalinti Interceptor pavyzdinį kodą:
4 veiksmas: nurodykite tipą, kurį norite perimti
Yra du būdai:
Pirmasis tipas: funkcijos atributo įtraukimas į tipą
Antrasis tipas yra dinamiškai įpurkšti perėmėją, kai registracijos tipas perkeliamas į konteinerį
5 veiksmas: patikrinkite efektą
1. Tarpinio serverio perėmimas
Apskritimo klasės kodas:
2. Sąsajos tarpinio serverio perėmimas
IShape sąsajos kodas:
Apskritimo klasės kodas:
|