Avi Farah Ответов: 1

Как я могу использовать тот же набор правил, которые используются компилятором для соответствия методу в getmethod(..)


Я пишу AOP против старого устаревшего класса, который не имеет преимуществ встроенного контейнера IoC. Я использую силу динамических типов, используя производный класс DynamicObject. Когда я использую

mi = obj.Метод gettype().GetMethod(methNm, parmType);

вызовите, если типы параметров (представленные parmType, выше) не являются точно теми типами, с которыми был объявлен метод, то приведенный выше GetMthod(..) не найдет метод.

Мой вопрос к вам таков: знаете ли Вы способ, потенциально используя семантическую модель Рослина, использовать тот же набор правил, которые используются компилятором для сопоставления метода в GetMethod(..) с "лучшим выбором" метода?

Что я уже пробовал:

Я читаю через RuntimeBinder в надежде найти ключ...

Nathan Minier

Не в автоматическом режиме, но вы можете перечислять через obj.Метод gettype().GetMethods().Выберите(х => У Х.GetParameters) на карту с помощью переключателя.

Проблема в том, что это определение времени выполнения, поэтому компилятор не может сделать "лучшее предположение".

Avi Farah

Натан, спасибо тебе! Я надеюсь, что смогу использовать существующую функциональность в отличие от построения логики, которая есть в компиляторе. Когда я это выясню, я отправлю его.

1 Ответов

Рейтинг:
6

Avi Farah

Проблема с моим кодом выше заключается в попытке найти метод, используя аргументы типа, которые не существуют в исходном классе. Линия:

mi = obj.Метод gettype().GetMethod(methNm, parmType);

это и есть виновник.

Что мне нужно было сделать, так это использовать Тип1.IsAssignableFrom(Type2), чтобы решить, какой метод вызывать.