2009-09-16 15 views
5

Ich bin ein Design implementieren, wo meine Schicht zwischen Client und Server sitzen würde, und was auch immer ich von Server bekomme, würde ich es in einem transparenten Proxy wickeln und dem Client geben, auf diese Weise kann ich ein halten verfolgen, was sich im Objekt geändert hat, also wenn ich es zurückspare, würde ich nur geänderte Informationen senden.Burg dynamische Proxy-Erstellung

Ich sah Burg dynamische Proxy, linfu, obwohl sie einen Proxy-Typ generieren können, aber sie können nicht vorhandene Objekte und wickeln sie stattdessen.

fragen sich, ob ihre möglich mit diesen Rahmenbedingungen zu tun, oder wenn es andere Frameworks, die dies ermöglichen ...

Antwort

4

Castle Dynamische Proxy 3.x oder später kann das tun, obwohl man im Auge zu behalten haben, dass Es kann nur virtuelle Methoden abfangen, also ist es keine perfekte Abstraktion.

+0

Die entsprechenden Methoden mit „WithTarget“ nicht auf der '' ProxyGenerator'' Klasse, z 'CreateClassProxyTypeWithTarget' – Nathan

5

Wir verwenden zustandslose Entitäten, und aufgrund eines Verhaltens von ASP.NET GridView musste ich einen Proxy erstellen, der nur vorhandene Objekte umschließen würde.

habe ich eine Abfangjäger, die eine Zielinstanz auf diese Weise hält:

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

Dann können Sie einfach den Wrapper-Proxy erstellen:

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