如何为各种构造函数执行Activator.CreateInstance?

时间:2010-12-02 15:29:24

标签: c#

我需要获取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   :Ett undantagsfelharinträffati   måletförenaktivering。 ----&GT;   System.TypeInitializationException:   Typinitierarenför   PlaynGO.Cashier.Data.CashierDCutlöste   ett undantag。 ----&GT;   System.NullReferenceException:   Objektreferensen har inte angetts直到   en instans av ett objekt。 VID   System.RuntimeMethodHandle InvokeConstructor(IRuntimeMethodInfo   方法,Object [] args,ref   SignatureStruct签名,RuntimeType   declaringType)vid   System.Reflection.RuntimeConstructorInfo.Invoke(的BindingFlags   invokeAttr,Binder binder,Object []   参数,CultureInfo文化)vid   System.RuntimeType.CreateInstanceImpl(的BindingFlags   bindingAttr,Binder binder,Object []   args,CultureInfo culture,Object []   activationAttributes)vid   System.Activator.CreateInstance(类型   type,Object [] args)vid   PlaynGO.Dbml.Reflexion.b _3(类型   t)i Reflexion.cs:第23行视频   System.Linq.Enumerable.WhereSelectArrayIterator 2.MoveNext() vid System.Collections.Generic.List 1..ctor(IEnumerable的1 collection) vid System.Linq.Enumerable.ToList(IEnumerable 1   来源)vid   PlaynGO.Dbml.Reflexion.GetInstances(大会   组装)i Reflexion.cs:第23行视频   PlaynGO.Dbml.UnitTests.TestReflection.TestGettingTypes()   i TestReflection.cs:第21行   --TypeInitializationException vid PlaynGO.Cashier.Data.CashierDC..ctor(String   连接)   --NullReferenceException vid PlaynGO.Cashier.Data.CashierDC..cctor()

我想调用的构造函数如下:

    public CashierDC(string connection) :
   base(connection, mappingSource)

MappingSource直接实例化,是一个实例字段。我哪里出错了?我需要做些什么来完成这项工作?

PS。这是.NET 4.0

2 个答案:

答案 0 :(得分:5)

我认为你的错误是别的。如果Activator.CreateInstance找不到您的构造函数,则会得到MissingMethodException而不是TargetInvocationException。我怀疑你试图实例化的实际类中还有其他错误。

答案 1 :(得分:2)

TargetInvocationException指示它正在调用的构造函数抛出了异常。也许这是由于您为连接字符串传递的实际值。您可能希望尝试使用调试器并在构造函数中设置断点,并使用连接字符串和(1)确保调用它并(2)确定异常发生的位置。