2013-12-20 2 views
1

Использование Castle.DynamicProxy, что является лучшим способом создания прокси-сервера из существующего экземпляра класса?Создать прокси-сервер из существующего объекта

// The actual object 
Person steve = new Person() { Name = "Steve" }; 

// Create a proxy of the object 
Person fakeSteve = _proxyGenerator.CreateClassProxyWithTarget<Person>(steve, interceptor) 

// fakeSteve now has steve as target, but its properties are still null... 

Вот класс Person:

public class Person 
{ 
    public virtual string Name { get; set; } 
} 

Вот класс перехватчика:

public class PersonInterceptor : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     Person p = invocation.InvocationTarget as Person; 

     if (invocation.Method.Name.Equals(get_Name) 
     { 
      LoadName(p); 
     } 
    } 

    private void LoadName(Person p) 
    { 
     if (string.IsNullOrEmpty(p.Name)) 
     { 
      p.Name = "FakeSteve"; 
     } 
    } 
} 

ответ

1

Если ваш класс Person имеет только невиртуальные свойства прокси-сервер может не доступ к ним. Попробуйте сделать свойства виртуальными.

http://kozmic.net/2009/02/23/castle-dynamic-proxy-tutorial-part-vi-handling-non-virtual-methods/

+0

Наименование - виртуальная собственность. Вопрос обновлен с помощью определения Person. – Aetherix

+0

Хорошо, так что делает ваш перехватчик? – thuri

+0

Идея состоит в том, чтобы ленить загрузку некоторых (виртуальных) свойств. – Aetherix

Смежные вопросы