城堡动态代理创建
问题描述:
我正在实现一个设计,其中我的图层将位于客户端和服务器之间,并且无论我从服务器获得的任何对象,我都会将其包装在透明代理中并提供给客户端,那样我可以保留追踪对象中发生了什么变化,所以当保存它时,我只会发送更改后的信息。城堡动态代理创建
我看着城堡动态代理linfu,尽管它们可以生成代理类型,但他们不能采用现有对象并将其包装。
想知道如果可以做到这些框架,或者,如果有任何其他的框架,使这个...
答
城堡动态代理3.x或更高版本可以做到这一点,但你必须记住,它只能截取虚拟方法,所以它不是一个完美的抽象。
答
我们使用无状态的实体,并且由于ASP.NET GridView的行为,我需要创建一个只能包装现有对象的代理。
我创建了保留一个目标实例这样的拦截:
public class ForwardingInterceptor : IInterceptor
{
private object target;
private Type type;
public ForwardingInterceptor(Type type, object target)
{
this.target = target;
}
public void Intercept(IInvocation invocation)
{
invocation.ReturnValue = invocation.Method.Invoke(this.target, invocation.Arguments);
}
}
然后,你可以简单地创建包装代理:上
this.proxyGenerator.CreateClassProxy(type, new ForwardingInterceptor(type, target));
相关的方法结束与“WithTarget”的'' ProxyGenerator'类,例如'CreateClassProxyTypeWithTarget' – Nathan 2014-02-12 23:19:59