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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.462 из 5
Похожие ответы