Пользуясь раньше 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. Неужели это единственная возможность?