簡體   English   中英

如何為各種構造函數做Activator.CreateInstance?

[英]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(IEnumerable 1 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM