【发布时间】:2014-06-20 06:27:03
【问题描述】:
我以下列方式使用反射: a) 加载程序集 b) 获取所有方法及其各自的参数 c) 调用方法
在调用将输入类型作为原始数据类型(int、double、string 等)的方法时不会遇到问题 我尝试以两种方式调用该方法:
(object)method.Invoke(obj,respar);
其中 respar 是一个输入参数数组
object cu = Activator.CreateInstance(typeof(Customer)) as Customer;
respar.SetValue(cu, i);//i = index
和
(object)type.InvokeMember(methodName, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Default,null, obj, respar);
在哪里
object obj = Activator.CreateInstance(type,true);//obj
在第一种情况下,我得到一个参数异常错误,在第二种情况下,我得到 Method not found Exception。
例如,如果我调用 GetCustomer(Customer data) 方法,其中 Customer 是一个类,则会引发上述错误。
让我详细解释一下: 有一类 CustomerModel
public class CustomerModel
{
public string FirstName{get;set;}
public string LastName {get;set;}
}
和客户类
public class Customer
{
public CustomerModel GetCustomerDetails(CustomerTable tableobj)
{
//TODO: Get customer details from tableobj and pass to CustomerModel Obj
}
}
我正在尝试通过反射调用此客户类的所有方法。 还有一个类Test:
public class Test
{
public void GetAllMethodsInassembly()
{
//Load assembly
//Get all classes
// Foreach Class=> get all methods
//Invoke each method => get result and store in XML file
}
}
Customer GetCustomerDetails 中的方法如前所述抛出异常。请提出建议。
【问题讨论】:
-
请提供有关异常的更多详细信息,最好是整个消息。此客户类型在哪里定义?
-
“客户”类型的对象无法转换为“客户”类型。另一个是:找不到方法'GetCustomer'。客户类在我提到的同一个程序集中定义
-
您是否在程序集中定义了客户类型?你是如何加载程序集的?您是否正在动态加载您也引用的程序集?
-
以这种方式加载程序集:
codeAssembly assembly = Assembly.LoadFile(); foreach (在 assembly.GetTypes() 中输入类型) { if (type.IsClass) { MethodInfo method = type.GetMethod(methodName);是 使用反射动态加载程序集 -
尝试使用 LoadFrom 而不是 LoadFile
标签: c# reflection invokemember