프로그래밍/NET Framework
외부 어셈블리에 이벤트 핸들러 추가
IODES
2015. 11. 17. 16:55
최근 리플렉션을 활용할 일이 많은 개발 작업을 하고 있습니다.
외부 어셈블리에다가 동적으로 이벤트 핸들러를 연결할 필요가 생겨서 찾아보았습니다.
우선, 연결할 메소드를 찾아줍니다.
1 | MethodInfo method = GetType().GetMethod("Widget_MouseMove"); | cs |
여기서 주의 할 부분은, 연결할 메소드의 인자는 해당 이벤트와 동일해야 합니다.
또한 해당 메소드는 public static 메소드로 설정해야 합니다.
그 다음, 연결할 대상 이벤트를 어셈블리에서 찾아줍시다.
저는 MouseMove 이벤트에 연결을 해보도록 하겠습니다.
1 | EventInfo evnetMove = assemblyType.GetEvent("MouseMove"); | cs |
이제, 대리자를 생성해줍니다.
1 2 | Type delegateType = evnetMove.EventHandlerType; Delegate delegate = Delegate.CreateDelegate(delegateType, method); | cs |
마지막으로, 이벤트 핸들러 연결 메소드로 이벤트를 연결해주면 됩니다.
1 2 | MethodInfo methodAdd = evnetMove.GetAddMethod(); methodAdd.Invoke(targetObject, new object[] { delegate }); | cs |