我需要获取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
答案 0 :(得分:5)
我认为你的错误是别的。如果Activator.CreateInstance找不到您的构造函数,则会得到MissingMethodException
而不是TargetInvocationException
。我怀疑你试图实例化的实际类中还有其他错误。
答案 1 :(得分:2)
TargetInvocationException指示它正在调用的构造函数抛出了异常。也许这是由于您为连接字符串传递的实际值。您可能希望尝试使用调试器并在构造函数中设置断点,并使用连接字符串和(1)确保调用它并(2)确定异常发生的位置。