2009-09-16 40 views
5

Katmanımın istemci ve sunucu arasında nerede oturacağını ve sunucudan aldığım nesneler arasında bir tasarım gerçekleştiriyorum, şeffaf bir proxy içinde sardım ve müşteriye verdim, böylece Nesnede neyin değiştiğini takip et, böylece geri kaydettiğimde, sadece değiştirilen bilgileri yolluyorum.kale dinamik proxy oluşturma

Bir proxy türü oluşturabildikleri halde, kale dinamik proxy linfu'ya baktım, ancak varolan nesneleri alıp yerine koyamazlar.

merak akılda tutmak zorunda olsa onun muhtemel veya bu etkinleştirmek başka çerçeveler ...

cevap

4

Kale Dinamik Vekil 3.x veya sonrası orada yapabileceğini, bu çerçeveler ile yapmak eğer Sadece sanal yöntemleri engelleyebilir, bu yüzden mükemmel bir soyutlama olmaz.

+0

ilgili yöntemler "WithTarget" ile sona '' ProxyGenerator' sınıfı, örneğin 'CreateClassProxyTypeWithTarget' – Nathan

5

Durum bilgisi olmayan varlıkları kullanıyoruz ve ASP.NET GridView I'nin bir davranışı nedeniyle, yalnızca varolan nesneyi saracak bir proxy oluşturmamız gerekiyordu. Sonra

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

sadece sarıcı vekil oluşturabilir:

bir hedef instance'a bu şekilde tutan bir önleme yarattı üzerinde

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