Τι είναι το AOP; Παραθέτοντας την Εγκυκλοπαίδεια Baidu: Το AOP είναι η συντομογραφία του Aspect Oriented Programming, που σημαίνει: μια τεχνολογία για προγραμματισμό προσανατολισμένο στο πρόσωπο για την επίτευξη ενοποιημένης συντήρησης των λειτουργιών του προγράμματος μέσω μεθόδων προ-μεταγλώττισης και δυναμικών πρακτόρων κατά τη διάρκεια του χρόνου εκτέλεσης. Υπάρχουν δύο κύριοι τρόποι εφαρμογής του AOP, ο ένας είναι η στατική εμφύτευση κατά τη μεταγλώττιση, το πλεονέκτημα είναι η υψηλή απόδοση, το μειονέκτημα είναι η έλλειψη ευελιξίας και το postsharp κάτω από το .net είναι ο αντιπρόσωπος (αυτό χρεώνεται). Η άλλη μέθοδος είναι οι δυναμικοί διακομιστής μεσολάβησης, οι οποίοι έχουν τα αντίθετα πλεονεκτήματα και μειονεκτήματα από την πρώτη, δημιουργώντας δυναμικά διακομιστές μεσολάβησης για τον τύπο στόχου και υποκλέπτοντάς τους μέσω κλήσεων διακομιστή μεσολάβησης. Αυτό που μπορεί να κάνει το AOP, οι περιπτώσεις κοινής χρήσης είναι η επεξεργασία συναλλαγών, η καταγραφή κ.λπ. Ας μιλήσουμε για το πώς η Autofac εφαρμόζει το AOP, το Autofac είναι ένα πολύ καλό κοντέινερ IOC στο .net και πολύ καλή απόδοση (το πιο αποτελεσματικό κοντέινερ στο .net), καθώς και το AOP είναι απλά μια τίγρη. Το AOP της Autofac υλοποιείται μέσω του βασικού τμήματος του έργου Castle (επίσης κοντέινερ) που ονομάζεται Autofac.Extras.DynamicProxy, το οποίο, όπως υποδηλώνει το όνομα, υλοποιείται ως δυναμικός διακομιστής μεσολάβησης.
Προετοιμασία πριν από τη χρήση:
Εγκαταστήστε το πακέτο Nuget Autofac, Autofac.Extras.DynamicProxy και θα προστεθούν τρεις αναφορές μετά την επιτυχή εγκατάσταση
Τώρα ξεκίνησε επίσημα!
Βήμα 1: Δημιουργήστε έναν αναχαιτιστή
Παρακάτω είναι ένα παράδειγμα απλού αναχαιτιστή που εμφανίζει το όνομα της μεθόδου που αναχαιτίζεται, μια λίστα παραμέτρων και το αποτέλεσμα επιστροφής
Βήμα 2: Καταχωρίστε τον αναχαιτιστή στο δοχείο Autofac
Ο αναχαιτιστής πρέπει να είναι καταχωρημένος στο δοχείο Aufofac, είτε με βάση τον τύπο του αναχαιτιστή είτε με το όνομα, γεγονός που καθιστά τη μέθοδο χρήσης του αναχαιτιστή διαφορετική (όπως συζητείται παρακάτω).
Εισαγωγή ονόματος οικοδόμος. Register(c => νέο CallLogger(Console.Out)). Named<IInterceptor>("log-calls");
Τύπος έγχυσης οικοδόμος. Register(c => νέο CallLogger(Console.Out));
Βήμα 3: Ενεργοποιήστε τον αναχαιτιστή
Υπάρχουν δύο κύριοι τρόποι για να ενεργοποιήσετε τον αναχαιτιστή: EnableInterfaceInterceptors(), EnableClassInterceptors().
Η μέθοδος EnableInterfaceInterceptors δημιουργεί δυναμικά έναν διακομιστή μεσολάβησης διασύνδεσης
Η μέθοδος EnableClassInterceptors θα δημιουργήσει μια κλάση διακομιστή μεσολάβησης υποκλάσης της κλάσης προορισμού και θα πρέπει να σημειωθεί εδώ ότι θα υποκλέψει μόνο την εικονική μέθοδο και θα παρακάμψει τη μέθοδο
Ενεργοποίηση δείγματος κώδικα αναχαίτισης:
Βήμα 4: Υποδείξτε τον τύπο που θέλετε να υποκλέψετε
Υπάρχουν δύο τρόποι:
Ο πρώτος τύπος: Προσθήκη χαρακτηριστικού χαρακτηριστικού στον τύπο
Ο δεύτερος τύπος είναι η δυναμική έγχυση του αναχαιτιστή όταν ο τύπος καταχώρισης μεταφέρεται στο δοχείο
Βήμα 5: Δοκιμάστε το αποτέλεσμα
1. Υποκλοπή πληρεξουσίου
Κωδικός κλάσης κύκλου:
2. Υποκλοπή διακομιστή μεσολάβησης διεπαφής
Κωδικός διεπαφής IShape:
Κωδικός κλάσης κύκλου:
|