城堡动态代理创建

问题描述:

我正在实现一个设计,其中我的图层将位于客户端和服务器之间,并且无论我从服务器获得的任何对象,我都会将其包装在透明代理中并提供给客户端,那样我可以保留追踪对象中发生了什么变化,所以当保存它时,我只会发送更改后的信息。城堡动态代理创建

我看着城堡动态代理linfu,尽管它们可以生成代理类型,但他们不能采用现有对象并将其包装。

想知道如果可以做到这些框架,或者,如果有任何其他的框架,使这个...

城堡动态代理3.x或更高版本可以做到这一点,但你必须记住,它只能截取虚拟方法,所以它不是一个完美的抽象。

+0

相关的方法结束与“WithTarget”的'' ProxyGenerator'类,例如'CreateClassProxyTypeWithTarget' – Nathan 2014-02-12 23:19:59

我们使用无状态的实体,并且由于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));