通过MethodInfo问题调用方法

时间:2010-01-25 03:22:51

标签: c# reflection types

我通过查询字符串获取类名和方法名以及参数。我不知道会发生什么,所以我不能说让我们创建这个实例或那个实例来传递它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 个答案:

答案 0 :(得分:1)

  

但是因为我不知道它是从QueryString传来的,所以我无法创建我想要调用该方法的类的实例。

为什么不呢?你知道对象的类型。只需调用默认构造函数即可获得实例。

实例方法需要对象的实例。没有两种方法。回顾一下你编写的所有实例方法,即使有意义调用它们而没有它们后面的实际对象实例呢?

答案 1 :(得分:1)

如果您知道包含要调用的类的程序集,则可以使用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

答案 2 :(得分:0)

抱歉,我在这里很难理解这个问题。

如果您不知道哪些参数已传递到查询字符串中,您可以使用构造函数/方法签名,只需获取查询字符串,然后在内部对其进行解析。

修改

如果它是你自己的类,你可以编写一个带有单个字符串或对象输入的方法或构造函数,然后使用正则表达式解析它,或者在'='上拆分字符串

如果不是要修改的类,则需要创建一个辅助类,以充当您尝试创建的对象的工厂来执行相同的操作。