2009-09-16 43 views
5

Wdrażam projekt, w którym moja warstwa znajdowałaby się między klientem a serwerem, i jakiekolwiek obiekty, które otrzymam z serwera, zawijałbym go w przezroczysty serwer proxy i przekazywałbym klientowi, dzięki czemu mógłbym zachować śledzenie tego, co zmieniło się w obiekcie, więc przy jego zapisywaniu wysyłałem tylko zmienione informacje.tworzenie dynamicznego proxy proxy

Spojrzałem na dynamiczny proxy zamku, linfu, mimo że mogą generować typ proxy, ale nie mogą pobierać istniejących obiektów i owijać ich.

Zastanawiasz się, czy jego możliwe do zrobienia z tych ram, czy jakieś inne ramy, które pozwalają to ...

3.x

Odpowiedz

4

Zamek Dynamiczna Proxy czy później może to zrobić, chociaż trzeba pamiętać, że może przechwytywać tylko wirtualne metody, więc nie jest idealną abstrakcją.

+0

Odpowiednie metody kończy z "WithTarget" w ' Klasa ProxyGenerator, np 'CreateClassProxyTypeWithTarget' – Nathan

5

Używamy elementów bezstanowych, a ze względu na zachowanie ASP.NET GridView potrzebowałem utworzyć proxy, które zawijałoby tylko istniejący obiekt.

I stworzył przechwytujących, które prowadzi docelowej instancji w ten sposób:

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

Następnie można po prostu stworzyć proxy Wrapper:

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