首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Activator.CreateInstance创建类的实例并将接口注入构造函数

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

Stack Overflow用户
提问于 2019-05-16 19:31:35
回答 2查看 554关注 0票数 0

我的目标是从类的AssemblyQualifiedName创建一个类的实例。问题是这个类需要在它的构造函数中传递一个接口,而我在使用Activator.CreateInstance做这件事时遇到了麻烦。

提前感谢你的帮助。

一旦我有了要实例化的类的AssemblyQualifiedName,我就使用Type.GetType(AQN)获取它的类型,使用该类型来查找构造函数并获取所需的参数。

当调用Activator.CreateInstance并传递参数时,我被卡住了。

代码语言:javascript
运行
复制
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上找不到”。

EN

回答 2

Stack Overflow用户

发布于 2019-05-16 19:36:46

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

代码语言:javascript
运行
复制
ISomeInterface something = null;

var objectType = Type.GetType(AQN);
var instance = Activator.CreateInstance(objectType, something);
票数 0
EN

Stack Overflow用户

发布于 2019-05-16 19:41:36

如果你想动态地创建一个类的实例,你也可以这样做

代码语言:javascript
运行
复制
        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;  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56167581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档