주어진 클래스에 대해 추적 기능을 원합니다. 즉 모든 메소드 호출 (메소드 서명 및 실제 매개 변수 값) 및 모든 메소드 종료 (메소드 서명)를 기록하고 싶습니다.
다음을 가정하여 이것을 어떻게 수행합니까?
- C #에 타사 AOP 라이브러리를 사용하고 싶지 않습니다.
- 추적하려는 모든 메소드에 중복 코드를 추가하고 싶지 않습니다.
- 클래스의 공개 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);
}
Caller.Call 메서드 를 수정 하지 않고 Traced.Method1 및 Traced.Method2에 명시 적으로 호출을 추가 하지 않고 Method1 및 Method2 를 호출 할 때마다 Logger.LogStart 및 Logger.LogEnd 를 어떻게 호출 합니까?
편집 : Call 메서드를 약간 변경할 수 있다면 어떻게 될까요?