Преобразование динамического прокси-объекта в исходный объект

 ProxyGenerator generator = new ProxyGenerator();
 var interceptor = new StandardInterceptor();
 MyInterfaceImpl test = (MyInterfaceImpl)generator.CreateClassProxy(typeof(MyInterfaceImpl), interceptor);

В приведенном выше примере объект test является прокси-объектом, предположим, что он создан третьей стороной.

Я не могу перейти к контракту операции WCF, принимающему параметр MyInterfaceImpl, поскольку его тип не MyInterfaceImpl, а MyInterfaceImplProxy.

Как мы можем преобразовать объект test в тип MyInterfaceImpl? Пожалуйста помоги.


person amar kumar    schedule 18.10.2014    source источник


Ответы (2)


Просто передайте его IProxyTargetAccessor, и все будет в порядке. См. https://github.com/castleproject/Core/blob/master/src/Castle.Core/DynamicProxy/IProxyTargetAccessor.cs

person hammett    schedule 19.10.2014
comment
Даже сейчас, когда я знаю ответ, я не могу уткнуться / погуглить его в документации Castle - немного позор за потрясающий проект! - person Igand; 14.11.2020

Я нашел этот ответ здесь.

internal static TType UnwrapProxy<TType>(TType proxy)
{
    if (!ProxyUtil.IsProxy(proxy))
        return proxy;

    try
    {
        dynamic dynamicProxy = proxy;
        return dynamicProxy.__target;
    }
    catch (RuntimeBinderException)
    {
        return proxy;
    }
}
person Ognyan Dimitrov    schedule 20.10.2014
comment
В моем случае мне понадобились перехватчики dynamicProxy .__ - person Daniel Williams; 23.11.2017