создание динамического прокси замка - PullRequest
5 голосов
/ 16 сентября 2009

Я реализую проект, в котором мой слой будет располагаться между клиентом и сервером, и любые объекты, которые я получаю от сервера, я бы обернул его в прозрачный прокси и дал бы клиенту, чтобы я мог отслеживать, что изменилось в объекте, поэтому при его сохранении я отправляю только измененную информацию.

Я посмотрел на динамический прокси-замок, linfu, хотя они могут генерировать тип прокси, но они не могут взять существующие объекты и обернуть их.

Хотите знать, если это возможно сделать с этими платформами, или если есть какие-либо другие платформы, которые позволяют это ...

Ответы [ 2 ]

6 голосов
/ 16 мая 2010

Мы используем объекты без сохранения состояния, и из-за поведения ASP.NET GridView мне нужно было создать прокси-сервер, который бы только обернул существующий объект.

Я создал перехватчик, который сохраняет целевой экземпляр следующим образом:

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

Тогда вы можете просто создать прокси-оболочку:

this.proxyGenerator.CreateClassProxy(type, new ForwardingInterceptor(type, target));
4 голосов
/ 03 декабря 2009

Castle Dynamic Proxy 3.x или более поздней версии может сделать это, хотя вы должны помнить, что он может перехватывать только виртуальные методы, поэтому это не идеальная абстракция.

...