5

我想为 BCL 中的类型创建动态代理,该类型是具有内部构造函数的抽象类。我一直是城堡的动态代理,这失败了,但有一个例外,说明没有无参数构造函数(它们是 - 它是内部的)。

有没有办法用城堡来实现这一点?如果不是,是否有任何其他动态代理框架能够做到这一点?这是开发的开始,因此很容易更改框架。

4

2 回答 2

4

DynamicProxy 不会做任何您在 C# 中无法手动完成的事情。所以它不能从它不能构造的类型继承,包括DynamicProxy可以访问的没有构造函数的类型。


如果您拥有该程序集,您可以通过您的 AssemblyInfo.cs 提供 DynamicProxy 访问,方法是添加:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

需要注意的重要一点是文字值,DynamicProxyGenAssembly2这是由 DynamicProxy 创建的内存程序集,您需要为其提供访问权限。

于 2012-06-24T20:27:55.940 回答
0

我刚刚找到了一种方法来实现这一点,而无需修改目标程序集。

关键是它TypeBuilder.DefineConstructor允许你创建一个构造函数而不调用基的任何构造函数。因此,可以使用公共构造函数动态创建继承原始类的 FAKE 类。

然后只需从假类创建代理。您可以在您的IInterceptor对象中或在假类的某些字段中记录真实的目标对象。

顺便说一句,我使用这个技巧来记录ILGenerator.Emit通话。谁知道更简单的拆卸方法ILGenerator.m_ILStream

于 2020-03-25T04:47:06.573 回答