DynamicProxy2 и Proxy Chaining - PullRequest
       31

DynamicProxy2 и Proxy Chaining

1 голос
/ 08 января 2010

У меня есть необходимость прокси типа свойств прокси. Таким образом, дело будет:

У меня есть интерфейс IMyInterface:

public interface IMyInterface
{
    public String Name {get; set;}
    public Int Id {get;set;}
}

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

IMyInterfaceMock.Name.Equals() 

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

Я не думаю, что это возможно с DynamicProxy2 в его нынешнем виде, но мне было интересно, знает ли кто-нибудь магию.

Ответы [ 2 ]

1 голос
/ 08 января 2010

а. Вы не можете изменить возвращаемый тип, потому что это будет означать недопустимое переопределение. б. даже если бы вы могли, вы не можете ничего переопределить в строке, которая запечатана, поэтому нет - это невозможно в CLR, используя обычный строго типизированный язык программирования.

0 голосов
/ 08 января 2010

Я понимаю, что тип будет недопустимым переопределением. Что я действительно искал, так это способ создания динамического типа. Я сделал это с помощью классов System.Reflection.Emit.

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

Мне следовало объяснить, что я записываю прокси-объект в конвейер PowerShell и, таким образом, на самом деле не заботился о типе, который испускается. Мне просто нужен способ оценить операторы сравнения.

...