Создание динамического прокси замка
Я реализую проект, в котором мой слой будет находиться между клиентом и сервером, и любые объекты, которые я получаю от сервера, я бы обернул его в прозрачный прокси и передал бы клиенту, чтобы я мог отслеживать, что изменилось в объекте., так что при сохранении я отправляю только измененную информацию.
Я посмотрел на динамический прокси-замок, linfu, хотя они могут генерировать тип прокси, но они не могут взять существующие объекты и обернуть их.
Хотите знать, если это возможно сделать с этими структурами, или если есть какие-либо другие структуры, которые позволяют это...
2 ответа
Castle Dynamic Proxy 3.x или более поздней версии может сделать это, хотя вы должны помнить, что он может перехватывать только виртуальные методы, поэтому это не идеальная абстракция.
Мы используем объекты без сохранения состояния, и из-за поведения 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));