其他分享
首页 > 其他分享> > 带有反射的内部构造函数的实例化类型

带有反射的内部构造函数的实例化类型

作者:互联网

我有一个工厂类,需要实例化一个未知的类.
这样做是这样的:

public class Factory
{
    public void SetFoo(Type f)
    {
        Activator.CreateInstance(f);
    }
}

问题是我希望该构造函数是内部的,但将其标记为内部会给我MissingMethodException,但是该构造函数在同一程序集中.
如果将其设置为特殊,则效果很好.

我已经尝试过这里提供的解决方案
How to create an object instance of class with internal constructor via reflection?

和这里
Instantiating a constructor with parameters in an internal class with reflection

转换成这样:

Activator.CreateInstance(f,true)

但没有成功…

我正在使用NETStandard.Library(1.6.1)和System.Reflection(4.3.0)

更新:

此更新时提供的答案为我指明了正确的方向:

var ctor = f.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic);

var instance = (f)ctor[0].Invoke(null);

多谢你们!

解决方法:

BindingFlags:

var ctor = typeof(MyType)..GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).FirstOrDefault(c => !c.GetParameters().Any());

var instance = (MyType)ctor.Invoke(new object[0]);

BindingFlags获取非公共构造函数.通过指定的参数类型(或缺少参数)可以找到特定的构造函数.调用调用构造函数并返回新实例.

标签:internal,net-standard,system-reflection,constructor,c
来源: https://codeday.me/bug/20191111/2022241.html