EDIT: tl; dr - я только что попытался создать прокси другим способом, как описано ниже, и он выдает результат, который вы искали. Я просто должен был изменить это:
var c = new InterceptedClass();
var i = new Interceptor();
var cp = new ProxyGenerator().CreateClassProxyWithTarget(c, i);
К этому:
var i = new Interceptor();
var cp = new ProxyGenerator().CreateClassProxy<InterceptedClass>(i);
Насколько я понимаю, прокси-генератор эффективно создает объект-оболочку. Это два отдельных объекта - один - просто обертка вокруг другого, с перехватом и т. Д. В слое обертки.
Трудно понять, как он может изменить то, что сделал экземпляр InterceptedClass
со своими вызовами методов:
- DynamicProxy не может изменить тип существующего объекта; после создания объекта его тип фиксируется
- DynamicProxy не может изменить способ привязки существующих вызовов к существующему объекту
Если вы хотите, чтобы Method1
вызывал Method2
через оболочку, используя текущий код создания прокси, вам нужно сообщить существующему объекту об оболочке, либо в виде поля внутри него, либо в качестве параметра метода.
В качестве альтернативы, может быть другой способ создания прокси-сервера, с которого прокси равен в некотором смысле целевой объект. Я подозреваю, что вы, возможно, захотите взглянуть на CreateClassProxy
, а не CreateClassProxyWithTarget
- я подозреваю, что это факт, что вы поставляете целевой объект, который вызывает у вас проблемы.
Является ли поведение, которое вы видите, «ожидаемым» или нет, очевидно, зависит от ваших ожиданий - но это, безусловно, то, чего ожидал бы I , ничего не зная о Castle Dynamic Proxy:)