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

In above example, test object is proxy object, assume it is created by 3rd party.

I am not able to pass to WCF operation contract accepting MyInterfaceImpl parameter as its type is not MyInterfaceImpl but it is MyInterfaceImplProxy.

How can we convert test object to MyInterfaceImpl type? Please help.

Andrew
  • 7,602
  • 2
  • 34
  • 42
amar kumar
  • 31
  • 2

2 Answers2

2

Just cast it to IProxyTargetAccessor and you should be good to go. See https://github.com/castleproject/Core/blob/master/src/Castle.Core/DynamicProxy/IProxyTargetAccessor.cs

hammett
  • 705
  • 4
  • 13
  • Even now when I know the answer I'm unable to duckduck/google it in Castle documentation - a little bit of shame on awesome project! – Igand Nov 14 '20 at 20:23
2

I have found this answer here.

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

    try
    {
        dynamic dynamicProxy = proxy;
        return dynamicProxy.__target;
    }
    catch (RuntimeBinderException)
    {
        return proxy;
    }
}
Community
  • 1
  • 1
Ognyan Dimitrov
  • 6,026
  • 1
  • 48
  • 70