агрегация (JScript.NET Engine)
От: shurick77  
Дата: 08.11.05 15:44
Оценка:
Добрый день!

Пользуясь раньше JScript Engine (который без .NET) была возможность выставить объект с интерфейсов IDispatch для доступа из скрипта. Соответственно все вызовы проходили через метод IDispatch.Invoke, а список всех методов получался через IDispatch.GetIDsOfNames. Таким образом в своем коде я мог контроллировать все обращения из скрипта к моему объекту, имел возможность "выставить" виртуальные методы, которых в действительно не существовала у target-объекта и в методе Invoke преобразовывать виртуальные методы в реальные.
Сейчас в проекте появилась необходимость прикрутить скрипт-engine. Был выбран JScript.NET и все с ним хорошо, пока не дошло до контроля обращения и виртуальных методов, про которые написано в первом абзаце. JScript.NET Engine обращается к "выставленным" объектам через Reflection. Вариант с Proxy не подходит — реальный target-объект не является наследником MarshalByRefObject и сделать его таковым возможности нету. Пока приходит в голову только генерация dynamic type с совпадающими по сигнатуре методами (а JScript.NET только сигнатуры и проверяет). Но это офигенный кусок кода, опять же придется разбираться с emitter. Неужели это единственная возможность?

Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.