使用Activator.CreateInstance创建类的实例并将接口注入构造函数

时间:2019-05-16 11:31:35

标签: c# reflection

我的目标是从其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类型的构造函数”。

2 个答案:

答案 0 :(得分:0)

有一个Activator.CreateInstance,它只接受要传递的类型和参数。所以你可以说:

ISomeInterface something = null;

var objectType = Type.GetType(AQN);
var instance = Activator.CreateInstance(objectType, something);

答案 1 :(得分:0)

如果您想动态创建该类的实例,那么您也可以这样做

        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;