C#에서 메서드 호출을 가로채기 위해 타사 라이브러리를 사용하지 마세요
외부 라이브러리를 사용하지 않고 C#에서 메서드 호출을 가로채는 방법에는 여러 가지가 있지만 그 중 어느 것도 간단하지 않습니다. 아래에는 고려해야 할 두 가지 옵션이 나열되어 있습니다.
은 MarshalByRefObject
또는 ContextBoundObject
에서 대상 클래스를 상속하고 IMessageSink
에서 상속된 속성을 정의합니다. 메서드 호출을 가로채고 적절한 로깅 메서드를 호출하려면 이 속성을 수정하세요. 그러나 이 접근 방식은 성능에 심각한 영향을 미칠 수 있습니다.
리플렉션을 사용하여 클래스를 검사하고, 속성을 검색하고, 기존 메서드에 코드를 삽입합니다. 이는 성찰에 대한 깊은 이해가 필요하며 Reflection.Emit
의 한계로 인해 실현 가능하지 않거나 신뢰할 수 없을 수도 있습니다. 또는 CLR 컴파일러에 대한 확장 사용을 고려할 수 있지만 이를 위해서는 C# 개발자가 일반적으로 보유하지 않은 전문 지식이 필요합니다.
호출 방법을 사용하여 수정된 솔루션의 일부:
Caller.Call
메서드 수정이 허용되면 솔루션 관리가 더 쉬워집니다. 차단 프록시를 사용하거나 Traced
과 동일한 인터페이스를 구현하는 새 클래스를 생성하면 원래 클래스에 위임하기 전에 메서드 호출을 가로채고 필요한 로깅을 수행할 수 있습니다. 이 접근 방식을 사용하려면 일부 리팩토링이 필요하지만 C#에서 AOP의 복잡성을 피할 수 있습니다.
위 내용은 외부 라이브러리 없이 C#에서 메서드 호출을 어떻게 가로챌 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!