Joã*_*ira 9 c# constructor internal system.reflection .net-standard
我有一个需要实例化一个未知类的工厂类。它是这样做的:
public class Factory
{
    public void SetFoo(Type f)
    {
        Activator.CreateInstance(f);
    }
}
问题是我希望该构造函数是内部的,但是将其标记为内部会给我一个 MissingMethodException,但构造函数在同一个程序集中。如果它设置为 public 它工作正常。
我已经尝试了这里提供的解决方案 如何通过反射创建具有内部构造函数的类的对象实例?
这意味着这样做:
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);
谢谢你们!
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]);
BindingFlags 获取非公共构造函数。通过指定的参数类型(或者更确切地说是缺少参数)找到特定的构造函数。Invoke 调用构造函数并返回新实例。