动态创建Proxy一个类

时间:2015-10-01 10:33:45

标签: c# reflection castle-dynamicproxy

我在运行时构建一个类并创建它的对象。

之后,我发现了这个生成的类的几个对象。

所以,我想代理这些对象:

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类对象。

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

在第二个语句var constructor =中,您指定System.Reflection.BindingFlags.NonPublic意味着它也应该获得私有构造函数,因此原始类可能会有类似下面的代码来解释您的场景。

public class Dynamic
{
    private Dynamic()
    {

    }

    public Dynamic(params object[] exactly)
    {

    }
}