Подписка на событие через Reflecion - C#
Формулировка задачи:
Здравствуйте.
Возникла потребность подписаться на событие, полученное через рефлекшен из другой сборки.
Проблема в том что событие возвращает аргументом объект, тип которого тоже описан в загружаемой сборке.
В итоге компилятор ругается на несовпадение сигнатур (что логично, ибо не могу объявить метод с неизвестным типом)
Кто-нибудь знает, как с этим можно поступить?
это подписка
а это объявление метода, которым подписываюсь
var handler = Delegate.CreateDelegate(_events["ZoneChanged"].EventHandlerType, typeof(RubezhProvider), "OnZoneChanged"); _events["ZoneChanged"].AddEventHandler(null, handler);
static void OnZoneStateChanged(object zoneState) { ... }
Решение задачи: «Подписка на событие через Reflecion»
textual
Листинг программы
Type generalActionType = typeof(Action<>); Type particularActionType = generalActionType.MakeGenericType(zoneType); System.Reflection.Emit.DynamicMethod method = new System.Reflection.Emit.DynamicMethod("someMethod", typeof(void), new Type[] { zoneType }); System.Reflection.Emit.ILGenerator methodGenerator = method.GetILGenerator(); //... Delegate actionDelegate = method.CreateDelegate(particularActionType, someObject); object particularAction = Activator.CreateInstance(particularActionType, actionDelegate.Target, actionDelegate.Method.MethodHandle.Value);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д