project1有class1和interface1。 Class1实现了interface1。我有另一个项目将使用interface1测试这个class1方法。现在问题是我必须动态加载project1.dll并使用接口方法调用class1方法。为此,我使用反射加载project1.dll。现在,我从接口获取methodInfo,在调用此方法之前,我应该创建一个我将调用该方法的类的实例。要使用activator.createInstance创建类的实例,我需要知道构造函数params。现在,这些构造函数参数是自定义类型。正如我之前所说,我必须动态加载dll。那么有没有办法从装配负载中获取类型?或者任何其他方法来实现上述想法?以下是我的代码。
Assembly assembly = Assembly.LoadFrom(@"D:\Project1.dll");
Type[] typeArray = assembly.GetTypes();
object obj;
//First create the instance of the class
foreach (Type type in typeArray)
{
if (type.Name == "Class1")
{
Type[] types = new Type[4];
//I am not able to get the below customParams from the loaded assembly.
//Is there a way to do this. Can this be done without adding reference?
types[0] = typeof(CustompParam1);
types[1] = typeof(CustompParam2);
types[2] = typeof(CustompParam3);
types[3] = typeof(CustompParam4);
obj = Activator.CreateInstance(types);
}
}
//use the instance of the class to invoke the method from the interface
foreach (Type type in typeArray)
{
if (type.Name == "Interface1")
{
MethodInfo[] mInfo = type.GetMethods();
foreach (MethodInfo mi in mInfo)
{
mi.Invoke(obj, null);
}
}
}
答案 0 :(得分:0)
您可以像创建类实例一样获取构造函数参数的实例
按类型名称查找它们,为参数类型调用Activator.CreateInstance,然后将它们放入原始类的Activator.CreateInstance中。