Đối với một lớp nhất định, tôi muốn có chức năng theo dõi tức là tôi muốn ghi nhật ký mọi cuộc gọi phương thức (chữ ký phương thức và giá trị tham số thực tế) và mỗi lần thoát phương thức (chỉ chữ ký phương thức).
Làm thế nào để tôi thực hiện điều này giả định rằng:
- Tôi không muốn sử dụng bất kỳ thư viện AOP của bên thứ 3 nào cho C #,
- Tôi không muốn thêm mã trùng lặp vào tất cả các phương thức mà tôi muốn theo dõi,
- Tôi không muốn thay đổi API công khai của lớp - người dùng của lớp sẽ có thể gọi tất cả các phương thức theo cùng một cách chính xác.
Để làm cho câu hỏi cụ thể hơn, giả sử có 3 lớp:
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);
}
Làm thế nào để invoke Logger.LogStart và Logger.LogEnd cho mỗi cuộc gọi đến Method1 và Method2 mà không sửa đổi Caller.Call phương pháp và mà không cần thêm các cuộc gọi một cách rõ ràng để Traced.Method1 và Traced.Method2 ?
Chỉnh sửa: Điều gì sẽ là giải pháp nếu tôi được phép thay đổi một chút phương thức Gọi?