我在运行时构建一个类并创建它的对象。
之后,我发现了这个生成的类的几个对象。
所以,我想代理这些对象:
IInterceptor[] interceptors = new IInterceptor[1];
interceptors[0] = new Interceptors.IEditableObjectInterceptor<object>();
return DynamicExtensions.proxyGenerator.CreateClassProxyWithTarget(baseType, target, options, interceptors);
当我执行CreateClassProxyWithTarget
时,它会让我崩溃:
Can not instantiate proxy of class: DynamicDigitalInput.
Could not find a parameterless constructor.
所以,信息很清楚。但是,我尝试了下一个:
System.Reflection.ConstructorInfo cInfo = baseType.GetConstructor(new Type[] { });
Assert.That(cInfo != null);
var constructor = baseType.GetConstructor(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic,null, Type.EmptyTypes, null);
Assert.That(constructor != null);
object d = Activator.CreateInstance(baseType, new object[] {});
Assert.That(d != null);
它运作良好。所以我可以获取默认构造函数并实例化DynamicDigitalInput
类对象。
问题出在哪里?
答案 0 :(得分:0)
在第二个语句var constructor =
中,您指定System.Reflection.BindingFlags.NonPublic
意味着它也应该获得私有构造函数,因此原始类可能会有类似下面的代码来解释您的场景。
public class Dynamic
{
private Dynamic()
{
}
public Dynamic(params object[] exactly)
{
}
}