Подписка на событие через 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);