Apa itu AOP? Mengutip Baidu Encyclopedia: AOP adalah singkatan dari Aspect Oriented Programming, yang berarti: teknologi pemrograman berorientasi wajah untuk mencapai pemeliharaan terpadu fungsi program melalui metode pra-kompilasi dan agen dinamis selama runtime. Ada dua cara utama untuk mengimplementasikan AOP, satu adalah implantasi statis pada waktu kompilasi, keuntungannya adalah efisiensi tinggi, kerugiannya adalah kurangnya fleksibilitas, dan postsharp di bawah .net adalah perwakilan (ini dibebankan). Metode lainnya adalah proxy dinamis, yang memiliki kelebihan dan kekurangan yang berlawanan dari yang pertama, secara dinamis membuat proxy untuk jenis target dan mencegatnya melalui panggilan proxy. Apa yang dapat dilakukan AOP, kasus penggunaan umum adalah pemrosesan transaksi, pencatatan, dll. Mari kita bicara tentang bagaimana Autofac mengimplementasikan AOP, Autofac adalah kontainer IOC yang sangat bagus di bawah .net dan kinerja yang sangat baik (kontainer paling efisien di bawah .net), ditambah AOP hanyalah harimau. AOP Autofac diimplementasikan melalui bagian inti dari proyek Castle (juga kontainer) yang disebut Autofac.Extras.DynamicProxy, yang, seperti namanya, diimplementasikan sebagai proxy dinamis.
Persiapan sebelum digunakan:
Instal paket Nuget Autofac, Autofac.Extras.DynamicProxy, dan tiga referensi akan ditambahkan setelah penginstalan berhasil
Sekarang secara resmi dimulai!
Langkah 1: Buat pencegat
Di bawah ini adalah contoh pencegat sederhana yang menampilkan nama metode yang disadap, daftar parameter, dan hasil yang dikembalikan
Langkah 2: Daftarkan pencegat ke kontainer Autofac
Pencegat harus terdaftar dalam wadah Aufofac, baik dengan jenis pencegat atau nama, yang membuat metode penggunaan pencegat berbeda (seperti yang dibahas nanti).
Injeksi nama pembangun. Daftar(c => CallLogger(Console.Out)) baru). Bernama <IInterceptor>("panggilan log");
Jenis injeksi pembangun. Register(c => CallLogger(Console.Out);
Langkah 3: Aktifkan pencegat
Ada dua cara utama untuk mengaktifkan pencegat: EnableInterfaceInterceptors(), EnableClassInterceptors().
Metode EnableInterfaceInterceptors secara dinamis membuat proksi antarmuka
Metode EnableClassInterceptors akan membuat kelas proksi subkelas dari kelas target, dan harus dicatat di sini bahwa metode tersebut hanya akan mencegat metode virtual dan mengganti metode tersebut
Aktifkan kode sampel Interceptor:
Langkah 4: Tunjukkan jenis yang ingin Anda cegat
Ada dua cara:
Jenis pertama: Menambahkan atribut fitur ke jenis
Jenis kedua adalah menyuntikkan pencegat secara dinamis saat jenis registrasi ditransfer ke kontainer
Langkah 5: Uji efeknya
1. Intersepsi proxy
Kode kelas lingkaran:
2. Intersepsi proxy antarmuka
Kode Antarmuka IShape:
Kode kelas lingkaran:
|