调用动态生成对象的构造函数

萨钦·凯恩斯(Sachin Kainth)

我有一些代码,实例化对象,看起来像这样

ObjectHandle instance = Activator.CreateInstance(assembly, cls);
return (T)instance.Unwrap();

现在,大多数情况下,由表示的类型cls没有构造函数,很容易创建。但是我有一个类,它带有一个带参数的构造函数。对此调用上面的代码将产生以下错误

Constructor on type 'X' not found

该参数是一个接口,我已经配置了Autofac返回它的特定具体实例。我的问题是,将以上代码更改为“查找”此构造函数,让Autofac返回参数的具体实例,然后实例化该对象,同时又允许另一个无构造函数的方法,是一种简洁的方法?类被实例化?

一生

在代码中定义构造函数后,编译器将不再为您生成默认的-无参数-构造函数。除非您使用Lazy<T>或在您的情况下,否则通常这不是什么大问题,Activator.CreateInstance它将始终使用默认的无参数构造函数。

强制传递到此方法中的类具有无参数构造函数的“最干净”方法是使用new()方法约束:

public T SomeMethod<T>(Assembly asm, T type) where T : new()

这将告诉编译器,无论调用此函数是什么,都必须具有无参数构造函数,如果没有,则将不会编译。

较脏的方法是在当前给您带来问题的类型中声明一个无参数的构造函数,但这是一个创可贴。它实际上并没有解决问题。

注意:如果您在方法上使用任何其他类型的约束,则new()约束必须始终为最后一个约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章