![](/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.