Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 3
1

Подписка на событие через Reflecion

06.06.2013, 15:16. Показов 1514. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Возникла потребность подписаться на событие, полученное через рефлекшен из другой сборки.
Проблема в том что событие возвращает аргументом объект, тип которого тоже описан в загружаемой сборке.
В итоге компилятор ругается на несовпадение сигнатур (что логично, ибо не могу объявить метод с неизвестным типом)
Кто-нибудь знает, как с этим можно поступить?
это подписка
C#
1
2
var handler = Delegate.CreateDelegate(_events["ZoneChanged"].EventHandlerType, typeof(RubezhProvider), "OnZoneChanged");
_events["ZoneChanged"].AddEventHandler(null, handler);
а это объявление метода, которым подписываюсь
C#
1
2
3
4
static void OnZoneStateChanged(object zoneState)
{
...
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2013, 15:16
Ответы с готовыми решениями:

Подписка на событие мешает сериализации объекта
Всем привет, ситуация такая - есть сериализируемый объект, который имеет событие. На событие могут...

WebForm подписка на событие динамически добавляемых контролов
Добрый день! Возник такой вопрос, почему у меня не получается подписать на событие клика кнопку...

Подписка на событие, простой пример
Привет всем. Вобщем хочу сделать винформу в WPF. Нужно чтобы в label постоянно писалось значение...

Таймер. Подписка на событие
В общем, использую я таймер из System.Timers.Timer Мне требуется сделать некое вот такое: ...

3
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
06.06.2013, 15:26 2
Как вариант можно объявить тип generic, при создании типа данных агрумент типа данных не указывать, а задать потом через свойства. Пример как-то так:
C#
1
2
3
Type listType = typeof(List<>);
listType = listType.MakeGenericType(dynamicType);
object list = Activator.Create(listType);
Вместо List<>, естственно, delegate.
0
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 3
06.06.2013, 16:47  [ТС] 3
Ilya81, не совсем понял как это поможет. Мне ведь нужно объявить сигнатуру метода так, чтоб подписаться на событие.
событие в загружаемой сборке описанно так
C#
1
public static event Action<Zone> ZoneChanged;
и, как я понимаю, любой тип аргумента в параметрах отличный от Zone - и компилятор откажется собирать

поясни плиз.
0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
07.06.2013, 09:26 4
Ну, генерировать тоже придётся, конечно, динамически. Как-то так:
C#
1
2
3
4
5
6
7
            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);
Сам метод можно комилировать из строки, например.
1
07.06.2013, 09:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2013, 09:26
Помогаю со студенческими работами здесь

Не срабатывает подписка на событие
Приветствую, ребята. Есть проблемка, по какой-то причине не срабатывает подписка на событие, может...

Почему отменяется подписка на событие
Есть WPF окно и не стандартный контрол ColorPicker. Дописал событие OnChange которое происходит при...

Динамическое создание объектов. Подписка на событие
У меня есть несколько linkbuttons которые создаются динамически, им всем присваиваю 1 общее событие...

Непонятная подписка на встроенный обобщенный делегат (событие)
Добрый день, сегодня начал разбираться с встроенным обобщенным делегатом и увидел что студия не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru