Memintas Panggilan Kaedah C# Tanpa Perpustakaan AOP Luaran: Penyelesaian dan Had
Kekurangan ciri AOP terbina dalam C# memberikan cabaran apabila mensasarkan untuk memintas panggilan kaedah tanpa bergantung pada perpustakaan pihak ketiga. Walau bagaimanapun, beberapa strategi boleh menganggarkan kefungsian ini, setiap satu dengan pertukarannya sendiri:
Pendekatan untuk Memintas Panggilan Kaedah:
Atribut Tersuai dan MarshalByRefObject: Teknik ini memanfaatkan atribut tersuai (mis., [Log]
) yang diwarisi daripada IMessageSink
. Walau bagaimanapun, ia memerlukan warisan daripada MarshalByRefObject
, yang boleh memperkenalkan overhed prestasi.
Suntikan Kod Dinamik (Refleksi): Pantulan masa jalan membolehkan suntikan kod ke dalam kaedah, membenarkan pemintasan. Pendekatan ini jauh lebih kompleks, menuntut pemahaman yang mendalam tentang refleksi dan berpotensi memberi kesan kepada kebolehselenggaraan.
Memanfaatkan Bekas IoC: Bekas Suntikan Ketergantungan (DI) menawarkan mekanisme untuk memintas panggilan kaedah, walaupun tidak menyeluruh untuk semua kaedah. Kesesuaiannya bergantung pada keperluan pemintasan khusus.
Mengubah suai Kaedah Pemanggil: Penyelesaian paling mudah, jika boleh dilaksanakan, melibatkan pengubahsuaian terus kaedah pemanggil untuk memasukkan pengelogan atau logik pemintasan lain sebelum dan selepas panggilan kaedah sasaran. Ini mudah tetapi memerlukan perubahan kod sedia ada.
Contoh Ilustrasi: Pengubahsuaian Kaedah Pemanggil
Contoh berikut menunjukkan pemintasan mudah menggunakan pengubahsuaian kaedah pemanggil:
<code class="language-csharp">public class Caller { public static void Call() { Traced traced = new Traced(); Logger.LogMethodStart(typeof(Traced).GetMethod(nameof(Traced.Method1)), new object[] { "name", 5 }); traced.Method1("name", 5); Logger.LogMethodEnd(typeof(Traced).GetMethod(nameof(Traced.Method1))); Logger.LogMethodStart(typeof(Traced).GetMethod(nameof(Traced.Method2)), new object[] { new object() }); traced.Method2(new object()); Logger.LogMethodEnd(typeof(Traced).GetMethod(nameof(Traced.Method2))); } }</code>
Pendekatan ini secara langsung menambah panggilan pengelogan di sekitar panggilan kaedah sasaran. Ambil perhatian bahawa kelas Logger
perlu dilaksanakan secara berasingan untuk mengendalikan butiran pengelogan. Kaedah ini adalah yang paling tidak mengganggu jika mengubah suai pemanggil boleh diterima. Pilihan lain menyediakan lebih banyak penyelesaian tujuan umum tetapi dengan kos peningkatan kerumitan.
Atas ialah kandungan terperinci Bagaimana untuk memintas Panggilan Kaedah dalam C# Tanpa Menggunakan Perpustakaan AOP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!