[英]Instantiate Type with internal Constructor with reflection
我有一個需要實例化一個未知類的工廠類。 它是這樣做的:
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);
謝謝各位!
綁定標志:
var ctor = typeof(MyType).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).FirstOrDefault(c => !c.GetParameters().Any());
var instance = (MyType)ctor.Invoke(new object[0]);
BindingFlags 獲取非公共構造函數。 通過指定的參數類型(或者更確切地說是缺少參數)找到特定的構造函數。 Invoke 調用構造函數並返回新實例。
首先,您需要找到構造函數:
var ctor = typeof(MyType).GetTypeInfo().GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single(x => /*filter by the parameter types*/);
var instance = ctor.Invoke(parameters) as MyType;
請添加對 System.Reflection 命名空間的引用。
您可以通過反射檢索構造函數並調用它。
var ctor = typeof(Test)
.GetConstructors(
BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Instance
)
.First();
var instance = ctor.Invoke(null) as Test;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.