Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 22873|Atsakyti: 0

[Šaltinis] .NET/C# įgyvendina AOP per Autofac ir DynamicProxy

[Kopijuoti nuorodą]
Paskelbta 2017-11-04 12:21:23 | | | |
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:







Ankstesnis:VS2010 C# Uždaryti prievado įrankio šaltinio kodą
Kitą:JS-MD5 šifravimo funkcija
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com