Вызовите метод через MethodInfo Проблема - PullRequest
1 голос
/ 25 января 2010

Я получаю имя класса и имя метода, а также параметры через строку запроса. Я не знаю, что произойдет, поэтому я не могу сказать, давайте создадим этот экземпляр или тот экземпляр, чтобы передать ему метод MethodInfo Invoke, поэтому мне нужно общее решение. Вот проблема:

string className = Request.QueryString["className"];
string actionMethod = Request.QueryString["actionName"];

поэтому я должен вызвать метод класса по приведенной выше информации:

System.Reflection.MethodInfo info = Type.GetType(className).GetMethod(actionMethod);
info.Invoke(obj, null);

Но так как я не знаю, что он исходит от QueryString, я не могу создать экземпляр класса, для которого я хочу вызвать метод.

Как мне справиться с этой проблемой ...

Ответы [ 3 ]

1 голос
/ 25 января 2010

Если вам известна сборка, содержащая вызываемый класс, вы можете использовать Assembly.CreateInstance(string) для создания своего экземпляра класса.

Код не проверен

object myObject = Assembly.CreateInstance(typeName);
MethodInfo info = Type.GetType(className).GetMethod(actionMethod);
info.Invoke(myObject, null);

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.createinstance.aspx

1 голос
/ 25 января 2010

Но так как я не знаю, что он исходит от QueryString, я не могу создать экземпляр класса, для которого я хочу вызвать метод.

Почему бы и нет? Вы знаете тип объекта. Просто вызовите конструктор по умолчанию, и вы получите свой экземпляр.

Для экземпляра метода требуется экземпляр объекта . Нет двух способов обойти это. Оглядываясь назад на все методы экземпляров, которые вы написали, имеет ли смысл иметь смысл вызывать их без реального экземпляра объекта за ними?

0 голосов
/ 25 января 2010

Извините, у меня возникли проблемы с пониманием этой проблемы.

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

EDIT

Если это ваш собственный класс, вы можете написать метод или конструктор с одной строкой или входом объекта, а затем проанализировать его либо с помощью регулярного выражения, либо с разбивкой строки на '='

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...