2009-09-16 12 views
5

Estoy implementando un diseño donde mi capa se ubicaría entre el cliente y el servidor, y cualquier objeto que obtenga del servidor, lo envolvería en un proxy transparente y se lo entregaría al cliente, de esa manera puedo mantener un seguimiento de lo que cambió en el objeto, por lo que al guardarlo de nuevo, solo enviaría información modificada.creación de proxy dinámico de castillo

Miré proxy dinámico de castillo, linfu, aunque pueden generar un tipo de proxy, pero no pueden tomar objetos existentes y envolverlos en su lugar.

Se pregunta si su posible hacer con estos marcos, o si hay alguna otra marcos que permiten a este ...

Respuesta

4

Castillo proxy dinámico 3.x o posterior pueden hacer eso, aunque hay que tener en cuenta que solo puede interceptar métodos virtuales, por lo que no es una abstracción perfecta.

+0

Los métodos pertinentes terminan con "WithTarget" en la '' ProxyGenerator'' clase, por ejemplo 'CreateClassProxyTypeWithTarget' – Nathan

5

Utilizamos entidades sin estado, y debido a un comportamiento de ASP.NET GridView tuve que crear un proxy que solo envolviera el objeto existente.

creé un interceptor que mantiene una instancia de destino de esta manera:

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); 
    }  
} 

A continuación, puede crear el proxy envoltorio:

this.proxyGenerator.CreateClassProxy(type, new ForwardingInterceptor(type, target)); 
Cuestiones relacionadas