![](/img/trans.png)
[英]How to Activator.CreateInstance a type which have not constructors?
[英]How to do Activator.CreateInstance for various constructors?
我需要獲取DataContext的子類,並且在下面的某個地方找到了下面的函數,它肯定找到了我的子類,但是我無法實例化它:(
public static IEnumerable<T> GetSubclassesFor<T>(Assembly assembly)
{
return (assembly.GetTypes()
.Where(t => t.BaseType == (typeof (T)))
.Select(t => (T) Activator.CreateInstance(t, new object[] {"asdasd"})))
.ToList();
}
我收到以下錯誤消息:
System.Reflection.TargetInvocationException:創建活動時發生的事件。 ----> System.TypeInitializationException:從PlaynGO.Cashier.Data.CashierDC utty標簽到Typinitieraren。 ----> System.NullReferenceException:對象獲取到對象為止。 vid System.RuntimeMethodHandle。 InvokeConstructor(IRuntimeMethodInfo方法,Object []參數,ref SignatureStruct簽名,RuntimeType聲明類型)vid System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,活頁夾活頁夾,Object []參數,CultureInfo文化)vid System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr活頁夾活頁夾,Object []參數,CultureInfo文化,Object [] activationAttributes)vid System.Activator.CreateInstance(Type type,Object [] args)vid PlaynGO.Dbml.Reflexion.b _3(Type t)i Reflexion.cs:line 23 vid System.Linq.Enumerable.WhereSelectArrayIterator
2.MoveNext() vid System.Collections.Generic.List
1..ctor(IEnumerable1 collection) vid System.Linq.Enumerable.ToList(IEnumerable
1 source)vid PlaynGO.Dbml.Reflexion .GetInstances(裝配體)i Reflexion.cs:第23行vid PlaynGO.Dbml.UnitTests.TestReflection.TestGettingTypes()i TestReflection.cs:第21行--TypeInitializationException vid PlaynGO.Cashier.Data.CashierDC..ctor(字符串連接) --NullReferenceExc eption vid PlaynGO.Cashier.Data.CashierDC..cctor()
我要調用的構造函數如下:
public CashierDC(string connection) :
base(connection, mappingSource)
MappingSource是直接實例化的,並且是一個實例字段。 我哪里出錯了? 我需要做些什么來完成這項工作?
PS。 這是.NET 4.0
我認為您的錯誤是另外一回事。 如果Activator.CreateInstance找不到您的構造函數,則會得到MissingMethodException
而不是TargetInvocationException
。 我懷疑您要實例化的實際類中還有其他問題。
TargetInvocationException表示它正在調用的構造函數引發了異常。 也許這是由於您為連接字符串傳遞的實際值。 您可能想嘗試使用調試器,並在構造函數中使用連接字符串設置斷點,並且(1)確保正在調用它,並且(2)確定發生異常的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.