Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일

public으로 노출되지 않은 다른 어셈블리의 delegate 인스턴스를 Reflection으로 생성하는 방법

가끔, 디버깅을 위해 public이 아닌 .NET BCL의 멤버를 Reflection을 이용해 건드려야 할 경우가 종종 있습니다. 예를 들어, System.Web.HttpCookieCollection 타입에는 다음과 같이 콜백 메서드를 담은 필드가 하나 있는데,

internal delegate void ValidateStringCallback(string key, string value);

private ValidateStringCallback _validationCallback;

Reflection을 이용해 저 값을 설정하고 싶다면 어떻게 해야 할까요? 어차피 필드 접근이야 FieldInfo를 구하면 가능한데, ValidateStringCallback 타입의 인스턴스는 delegate이기 때문에 System.Delegate 생성 절차에 따라 인스턴스를 만들어야 합니다. 일례로 다음과 같이 만들어 줄 수 있습니다.

class Program
{
    public static void Callback(string key, string value)
    {
    }

    private static void SetCallback(HttpCookieCollection hcc)
    {
        MethodInfo ci = typeof(Program).GetMethod("Callback", BindingFlags.Public | BindingFlags.Static);

        Assembly asm = Assembly.GetAssembly(typeof(HttpCookieCollection));
        Type delegateType =  asm.GetType("System.Web.ValidateStringCallback");

        Delegate di = Delegate.CreateDelegate(delegateType, ci);

        Type type = typeof(HttpCookieCollection);

        FieldInfo fi = type.GetField("_validationCallback", BindingFlags.NonPublic | BindingFlags.Instance);
        fi.SetValue(hcc, di);
    }
}

(첨부 파일은 이 글의 예제 코드를 포함합니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 7/5/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




... 16  17  18  19  20  21  22  23  24  25  26  27  28  29  [30]  ...
NoWriterDateCnt.TitleFile(s)
11660정성태9/4/20182364사물인터넷: 33. 세라믹 커패시터의 동작 방식파일 다운로드1
11659정성태8/19/20182531사물인터넷: 32. 9V 전압에서 테스트하는 PN2222A 트랜지스터파일 다운로드1
11658정성태8/18/20184217사물인터넷: 31. 커패시터와 RC 회로파일 다운로드3
11657정성태8/21/20183166사물인터넷: 30. 릴레이(Relay) 제어파일 다운로드3
11656정성태8/18/20181986사물인터넷: 29. 트랜지스터와 병렬로 연결한 LED파일 다운로드1
11655정성태8/18/20183302사물인터넷: 28. 저항과 병렬로 연결한 LED파일 다운로드1
11654정성태8/18/20182411사물인터넷: 27. 병렬 회로의 저항, 전압 및 전류파일 다운로드1
11653정성태8/18/20182258사물인터넷: 26. 입력 전압에 따른 LED의 전압/저항 변화파일 다운로드1
11652정성태9/11/20182108사물인터넷: 25. 컬렉터 9V, 베이스에 5V와 3.3V 전압으로 테스트하는 C1815 트랜지스터파일 다운로드1
11651정성태9/4/20184222사물인터넷: 24. 9V 전압에서 테스트하는 C1815 트랜지스터파일 다운로드3
11650정성태8/18/20182275사물인터넷: 23. 가변저항으로 분압파일 다운로드1
11649정성태8/14/20182527사물인터넷: 22. 저항에 따른 전류 테스트파일 다운로드1
11648정성태10/17/20183317사물인터넷: 21. 퓨즈를 이용한 회로 보호파일 다운로드3
11647정성태8/8/20182504오류 유형: 476. 음수의 음수는 여전히 음수가 되는 수(절대값이 음수인 수)
11646정성태8/8/20182195오류 유형: 475. gacutil.exe 실행 시 "Failure initializing gacutil" 오류 발생
11645정성태8/8/20182718오류 유형: 474. 닷넷 COM+ - Failed to load the runtime. [1]
11644정성태8/8/20183387디버깅 기술: 118. windbg - 닷넷 개발자를 위한 MEX Debugging Extension 소개
11643정성태8/12/20183609사물인터넷: 20. 아두이노 레오나르도 R3 호환 보드의 3.3v 핀의 LED 전압/전류 테스트 [1]파일 다운로드1
11642정성태8/3/20183606Graphics: 20. Unity - LightMode의 ForwardBase에 따른 _WorldSpaceLightPos0 값 변화
11641정성태8/3/20185110Graphics: 19. Unity로 실습하는 Shader (10) - 빌보드 구현파일 다운로드1
11640정성태8/3/20183648Graphics: 18. Unity - World matrix(unity_ObjectToWorld)로부터 Position, Rotation, Scale 값을 복원하는 방법파일 다운로드1
11639정성태8/2/20182934디버깅 기술: 117. windbg - 덤프 파일로부터 추출한 DLL을 참조하는 방법
11638정성태8/2/20182304오류 유형: 473. windbg - 덤프 파일로부터 추출한 DLL 참조 시 "Resolved file has a bad image, no metadata, or is otherwise inaccessible." 빌드 오류
11637정성태8/1/20183393Graphics: 17. Unity - World matrix(unity_ObjectToWorld)로부터 TRS(이동/회전/크기) 행렬로 복원하는 방법파일 다운로드1
11636정성태8/1/20186003Graphics: 16. 3D 공간에서 두 점이 이루는 각도 구하기파일 다운로드1
11635정성태8/1/20182771오류 유형: 472. C# 컴파일 오류 - Your project is not referencing the ".NETFramework,Version=v3.5" framework.
... 16  17  18  19  20  21  22  23  24  25  26  27  28  29  [30]  ...