Memantau Panggilan Kaedah C# Tanpa Pengubahsuaian Kod
Masalah:
Bagaimanakah anda boleh menjejak dan melog panggilan kaedah C#, termasuk tandatangan kaedah dan nilai parameter, tanpa mengubah antara muka awam kelas atau menggunakan rangka kerja AOP luaran?
Pendekatan:
Memintas panggilan kaedah secara langsung dalam C# tanpa perubahan kod adalah sukar kerana keupayaan AOP terbina dalam terhad. Berikut ialah dua penyelesaian yang berpotensi, masing-masing mempunyai had:
1. Pemintasan Atribut Tersuai:
Memanfaatkan MarshalByRefObject
atau ContextBoundObject
, anda boleh mencipta atribut tersuai yang melaksanakan IMessageSink
. Atribut ini, digunakan pada kaedah, akan memintas panggilan. Walau bagaimanapun, kaedah ini memperkenalkan overhed prestasi yang ketara (berpotensi kelembapan 10x).
2. Manipulasi Kod Masa Jalan (Refleksi):
Refleksi membenarkan suntikan kod log masa jalan ke dalam kaedah sasaran. Pendekatan ini memerlukan pengetahuan lanjutan tentang refleksi dan sangat invasif. Tambahan pula, menggunakan Reflection.Emit
untuk mengubah suai kaedah sedia ada mungkin tidak boleh dilaksanakan dalam semua kes.
Faktor Penting:
Caller.Call
) untuk memasukkan pengelogan mungkin merupakan penyelesaian yang lebih mudah dan berprestasi jika perubahan API boleh diterima.Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memintas dan Log Panggilan Kaedah C# Tanpa Mengubah Suai Kelas atau Menggunakan Perpustakaan AOP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!