使用反射的内部构造函数实例化类型

Joã*_*ira 9 c# constructor internal system.reflection .net-standard

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

public class Factory
{
    public void SetFoo(Type f)
    {
        Activator.CreateInstance(f);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我希望该构造函数是内部的,但是将其标记为内部会给我一个 MissingMethodException,但构造函数在同一个程序集中。如果它设置为 public 它工作正常。

我已经尝试了这里提供的解决方案 如何通过反射创建具有内部构造函数的类的对象实例?

在这里 使用反射在内部类中使用参数实例化构造函数

这意味着这样做:

Activator.CreateInstance(f,true)
Run Code Online (Sandbox Code Playgroud)

但没有成功...

我使用 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);
Run Code Online (Sandbox Code Playgroud)

谢谢你们!

Eri*_*ric 15

绑定标志:

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

var instance = (MyType)ctor.Invoke(new object[0]);
Run Code Online (Sandbox Code Playgroud)

BindingFlags 获取非公共构造函数。通过指定的参数类型(或者更确切地说是缺少参数)找到特定的构造函数。Invoke 调用构造函数并返回新实例。