Альтернатива EventInfo.AddEventHandler для закрытых событий - PullRequest
3 голосов
/ 21 июня 2011

У меня есть класс, который ожидает событий.

Я использую отражение, чтобы подключить обработчик событий к объекту следующим образом:

    public EventMonitor(object eventObject, string eventName)
    {
        _eventObject = eventObject;
        _waitEvent = eventObject.GetType().GetEvent(eventName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic );

        _handler = new EventHandler(SetEvent);
        _waitEvent.AddEventHandler(eventObject, _handler);
    }

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

Сбой вызова AddEventHandler: «Невозможно добавить обработчик события, поскольку для события не существует общедоступного метода добавления».

Есть ли обходной путь, который я могу использовать?

1 Ответ

11 голосов
/ 21 июня 2011

Не знаю, как я пропустил этот метод раньше, но вот решение, если у кого-то есть такая же проблема

Заменить вызов AddEventHandler на:

var addMethod = _waitEvent.GetAddMethod(true);
addMethod.Invoke(eventObject, new[] {_handler});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...