5 votes

création de proxy dynamique du château

Je suis en train d'implémenter une conception où ma couche se situerait entre le client et le serveur, et quels que soient les objets que je reçois du serveur, je les envelopperais dans un proxy transparent et les donnerais au client, de cette façon je peux garder une trace de ce qui a changé dans l'objet, ainsi lors de la sauvegarde, je ne renverrais que les informations modifiées.

J'ai regardé castle dynamic proxy, linfu, bien qu'ils puissent générer un type de proxy, mais ils ne peuvent pas prendre des objets existants et les envelopper à la place.

Je me demande s'il est possible de le faire avec ces frameworks, ou s'il existe d'autres frameworks qui le permettent...

7voto

jirkamat Points 816

Nous utilisons des entités sans état et, en raison d'un comportement de ASP.NET GridView, j'avais besoin de créer un proxy qui ne ferait qu'envelopper l'objet existant.

J'ai créé un intercepteur qui garde une instance cible de cette façon :

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

Ensuite, vous pouvez simplement créer le proxy wrapper :

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

4voto

Krzysztof Kozmic Points 19262

Castle Dynamic Proxy 3.x ou plus récent peut le faire, même si vous devez garder à l'esprit qu'il ne peut intercepter que les méthodes virtuelles et qu'il ne s'agit donc pas d'une abstraction parfaite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X