Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 22873|Jawab: 0

[Sumber] .NET/C# mengimplementasikan AOP melalui Autofac dan DynamicProxy

[Salin tautan]
Diposting pada 04/11/2017 12.21.23 | | | |
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:







Mantan:VS2010 C# Kode sumber Alat Port Tutup
Depan:Fungsi enkripsi JS-MD5
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com