Kas ir AOP? Citējot Baidu enciklopēdiju: AOP ir saīsinājums no Aspect Oriented Programming, kas nozīmē: tehnoloģija uz seju orientētai programmēšanai, lai panāktu vienotu programmas funkciju uzturēšanu, izmantojot iepriekšējas kompilācijas metodes un dinamiskus aģentus izpildes laikā. Ir divi galvenie veidi, kā ieviest AOP, viens ir statiskā implantācija kompilācijas laikā, priekšrocība ir augsta efektivitāte, trūkums ir elastības trūkums, un postsharp zem .net ir pārstāvis (tas ir iekasēts). Otra metode ir dinamiskie starpniekserveri, kuriem ir pretējas priekšrocības un trūkumi no pirmajiem, dinamiski izveidojot starpniekserverus mērķa tipam un pārtverot tos, izmantojot starpniekservera zvanus. Ko AOP var darīt, izplatītākie lietošanas gadījumi ir darījumu apstrāde, reģistrēšana utt. Parunāsim par to, kā Autofac īsteno AOP, Autofac ir ļoti labs SOK konteiners zem .net un ļoti laba veiktspēja (visefektīvākais konteiners zem .net), kā arī AOP ir vienkārši tīģeris. Autofac AOP tiek īstenots, izmantojot pils (arī konteinera) projekta galveno daļu ar nosaukumu Autofac.Extras.DynamicProxy, kas, kā norāda nosaukums, tiek īstenots kā dinamisks starpniekserveris.
Sagatavošana pirms lietošanas:
Instalējiet Nuget pakotni Autofac, Autofac.Extras.DynamicProxy, un pēc veiksmīgas instalēšanas tiks pievienotas trīs atsauces
Tagad tas ir oficiāli sācies!
1. darbība: pārtvērēja izveide
Zemāk ir vienkārša pārtvērēja piemērs, kas parāda pārtvertās metodes nosaukumu, parametru sarakstu un atgriešanas rezultātu
2. solis: reģistrējiet pārtvērēju Autofac konteinerā
Pārtvērējs ir jāreģistrē Aufofac konteinerā vai nu pēc pārtvērēja veida, vai pēc nosaukuma, kas padara pārtvērēja izmantošanas metodi atšķirīgu (kā aplūkots vēlāk).
Nosaukuma injekcija celtnieks. Register(c => jauns CallLogger(Console.Out)). Named<IInterceptor>("žurnāla zvani");
Tipa iesmidzināšana celtnieks. Register(c => jauns CallLogger(Console.Out));
3. darbība: iespējojiet pārtvērēju
Ir divi galvenie veidi, kā iespējot pārtvērēju: EnableInterfaceInterceptors(), EnableClassInterceptors().
EnableInterfaceInterceptors metode dinamiski izveido interfeisa starpniekserveri
EnableClassInterceptors metode izveidos mērķa klases apakšklases starpniekservera klasi, un šeit jāatzīmē, ka tā tikai pārtvers virtuālo metodi un ignorēs metodi
Iespējot Interceptor parauga kodu:
4. solis: norādiet veidu, kuru vēlaties pārtvert
Ir divi veidi:
Pirmais veids: objekta atribūta pievienošana tipam
Otrais veids ir dinamiski ievadīt pārtvērēju, kad reģistrācijas veids tiek pārnests uz konteineru
5. darbība: pārbaudiet efektu
1. Starpniekservera pārtveršana
Apļa klases kods:
2. Interfeisa starpniekservera pārtveršana
IShape interfeisa kods:
Apļa klases kods:
|