สำหรับคลาสที่กำหนดฉันต้องการมีฟังก์ชั่นการติดตามเช่นฉันต้องการบันทึกการเรียกใช้เมธอดทุกครั้ง (ลายเซ็นเมธอดและค่าพารามิเตอร์จริง) และทุกเมธอดออก (แค่ลายเซ็นเมธอด)
ฉันจะทำสิ่งนี้สำเร็จโดยสมมติว่า:
- ฉันไม่ต้องการใช้ห้องสมุด AOP ของบุคคลที่สามสำหรับ C #
- ฉันไม่ต้องการเพิ่มรหัสที่ซ้ำกันไปยังวิธีการทั้งหมดที่ฉันต้องการติดตาม
- ฉันไม่ต้องการเปลี่ยน API สาธารณะของชั้นเรียน - ผู้ใช้ของชั้นเรียนควรสามารถเรียกใช้วิธีการทั้งหมดได้ในลักษณะเดียวกัน
เพื่อให้คำถามที่เป็นรูปธรรมมากขึ้นสมมติว่ามี 3 คลาส:
public class Caller
{
public static void Call()
{
Traced traced = new Traced();
traced.Method1();
traced.Method2();
}
}
public class Traced
{
public void Method1(String name, Int32 value) { }
public void Method2(Object object) { }
}
public class Logger
{
public static void LogStart(MethodInfo method, Object[] parameterValues);
public static void LogEnd(MethodInfo method);
}
ฉันจะวิงวอนขอLogger.LogStartและLogger.LogEndสำหรับการเรียกร้องให้ทุกMethod1และMethod2โดยไม่มีการแก้ไขCaller.Callวิธีการและโดยไม่ต้องเพิ่มสายอย่างชัดเจนTraced.Method1และTraced.Method2 ?
แก้ไข: จะมีวิธีแก้ไขอย่างไรหากฉันอนุญาตให้เปลี่ยนวิธีการโทรเล็กน้อย