Обработчик событий с поздним связыванием и подпись события с типом объекта, известным только для сборки с поздним связыванием - PullRequest
0 голосов
/ 14 октября 2018

Это странно.Я не нашел никого другого, кто бы делал это, и, вероятно, для этого есть причина.

Я пытаюсь выполнить некоторое позднее связывание, динамически загружая файл dll, а затем создавая объекты этого класса.По сути, мне нужно использовать dll без фактического добавления ссылки на эту dll.

До сих пор я делал свои объекты «динамическими», а не членами конкретного класса, использовал Assembly.LoadFile () для захватадлл.Затем я вызвал .GetTypes () и использовал LINQ для поиска нужного типа.Наконец, я вызвал Activator.CreateInstance (тип, параметры []) для их создания.Насколько я могу судить, все сработало, в том смысле, что когда я смотрю на объект в Visual Studio, он говорит, что это тот тип, которого я ожидаю.

Часть, которую я еще не смогвыяснить, правильно ли заполнить слушатель событий.(Извините, я не знаю точного правильного термина для этого, что, вероятно, не помогает найти ответ.) Основная проблема заключается в том, что метод имеет тип объекта в качестве параметра, который известен DLL, но не моему классу,Поэтому я не могу просто создать метод, как обычно:

private void Listener_ThatsMyEvent(object sender, UnknownObjectType ItsAMystery)
{
    ItsAMystery.MysteryMethod();
}

... так как мой класс не знает, что такое UnknownObjectType.Я видел материал об объектах MethodInfo, но я не смог найти способ создать совершенно новый метод «объект» самостоятельно, если это правильный подход к нему.

Другая сторона проблемы заключается в том, что я не могу подписаться.Если вы идете:

DynamicObjectListener += Listener_ThatsMyEvent

... он жалуется, что не может использовать группу методов в качестве аргумента для динамически отправляемого оператора.Я попытался сделать его «объектом», но это, похоже, ведет себя как его собственная перегрузка (ничто не достигло моей точки останова), и я где-то читал, что превращение его в динамическое - это то же самое, что и объект для перегрузки.

Я знаю, что могу получить тип Listener и извлечь из него AddMethod MethodInfo, но это насколько я понял.Я пытался найти, что не является синтаксической сахарной версией "+ =" в этом контексте, чтобы посмотреть, смогу ли я заставить ее работать оттуда, но не нашел ее.

...