我的目标是从类的AssemblyQualifiedName创建一个类的实例。问题是这个类需要在它的构造函数中传递一个接口,而我在使用Activator.CreateInstance做这件事时遇到了麻烦。
提前感谢你的帮助。
一旦我有了要实例化的类的AssemblyQualifiedName,我就使用Type.GetType(AQN)获取它的类型,使用该类型来查找构造函数并获取所需的参数。
当调用Activator.CreateInstance并传递参数时,我被卡住了。
var objectType = Type.GetType(AQN);
var constructors = objectType.GetConstructors();
foreach (ConstructorInfo constructor in constructors)
{
var parameters = constructor.GetParameters();
var instantiatedObj = Activator.CreateInstance(objectType,parameters);
}
一旦我这样做了,我得到错误“构造函数在类型xxx上找不到”。
发布于 2019-05-16 19:36:46
有一个Activator.CreateInstance,它只接受要传递的类型和参数。所以你可以直接说:
ISomeInterface something = null;
var objectType = Type.GetType(AQN);
var instance = Activator.CreateInstance(objectType, something);
发布于 2019-05-16 19:41:36
如果你想动态地创建一个类的实例,你也可以这样做
Type type = Type.GetType(AQN);
PropertyInfo[] properties = type.GetProperties();
var instance = (BaseClass)Activator.CreateInstance(type);
for (int i = 0; i < properties.Length; i++)
{
PropertyInfo propertyInfo = type.GetProperty(properties[i].Name);
var propertyVal = Convert.ChangeType(yourpropertyvalue,
properties[i].PropertyType);
propertyInfo.SetValue(instance, propertyVal);
}
return instance;
https://stackoverflow.com/questions/56167581
复制相似问题