Имеется строка запроса(ну или просто строка) ../<контроллер>/<метод>/ далее параметры через "/". С помощью этой строки нужно вызвать соответствующий метод из класса контроллера. Класс контроллера есть, проблема в получении метода и передаче ему параметров(и вообще, решаема ли это проблема и есть ли она?). Из строки запроса я могу получить название метода, следовательно, найти метод из контроллера по имени. Но методы могут иметь одинаковые имена, но разное кол-во и разные по типу параметры.
Суть проблемы: как найти метод по параметрам, если я не знаю их типа. Т.е. если вдруг есть методы с одинаковым именем и одинаковым кол-вом параметров, то как с помощью рефлексии получить нужный?
как найти метод по параметрам, если я не знаю их типа
Никак, потому что именно типами параметров и определяется нужная перегрузка. И при вызове метода передаваемые значения должны иметь правильные типы, а как их конвертировать в нужный тип, если он неизвестен? Так что, в любом случае, без определения типов параметров не обойтись.
Я вижу 2 варианта:
Делать лексический анализ значений, извлечённых из строки, чтобы определить в какие типы они могут быть конвертированы (для каждого отдельного значения таких типов может быть несколько, например строку "50" можно конвертировать и в byte, и в int, и в double, и т. д.). А затем, определив все возможные наборы типов, искать метод с соответствующими параметрами.
Сначала найти все методы (выбрав те варианты перегрузки, которые подходят по количеству параметров), затем для каждого из них получить типы его параметров, а затем пробовать конвертировать свои значения в эти типы. Тот метод, для которого удастся успешно конвертировать все значения в соответствующий набор типов и будет подходящим.
Класс контроллера есть, проблема в получении метода и передаче ему параметров(и вообще, решаема ли это проблема и есть ли она?).
вызов метода через рефлексию
Из строки запроса я могу получить название метода, следовательно, найти метод из контроллера по имени.
названия метода достаточно что бы вызывать его через рефлексию. Даже, если там есть перегруженные методы к этому методу.
Но методы могут иметь одинаковые имена, но разное кол-во и разные по типу параметры.
так и есть.
как найти метод по параметрам, если я не знаю их типа. Т.е. если вдруг есть методы с одинаковым именем и одинаковым кол-вом параметров, то как с помощью рефлексии получить нужный?
это задача рефлексии а не твоя. Твоя задача передать просто правильную последовательность параметров в правильном типе данных каждый параметр. Все остальное сделает шарп.
в той строке которую ты принимаешь -- присылай себе строку вида
./<контроллер>/<метод>/типПараметра:значение&типПараметра:значение&.....
и, снова таки, через рефлексию ты будешь приводить в нужный формат данных строку.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Возникла проблема с форматами при привязке данных к DatePickerНеобходимо отображать дату в формате dd
С толкнулся с такой проблемой, что метод не может получить имя сервера по IPДля некоторых серверов это работает, а для некоторых нет
Как можно такое размытие реализовать? Пока только получается как на метки "My Output"
В архиве на стеллажах хранятся коробки с документамиКаждый стеллаж имеет свой штрих-код – Sххххх, где х – цифра от 0 до 9 Каждая полка на стеллажах...