How to “really” down-cast a DynamicProxy back to its original type (to send over WCF)
-
26-09-2019 - |
Question
OK, the situation is we have a class, PatientDto
, and a DynamicProxy generated by Castle, PatientDtoProxy
.
We're using this proxy in the Silverlight client, then want to send it back to the server via a WCF service call.
The WCF service Contract expects a PatientDto
(ie not the proxy) and, as expected, blows up if you try to send anything else.
Essentially, we feel like we should be "casting" it back to a PatientDto
to get things to work... but in reality, even if you cast the reference down to PatientDto, it doesn't change anything -- WCF still sees the object in memory as a PatientDtoProxy
and blows up.
Obviously, doing a deep-copy into a new'ed up PatientDto
is an option (and does work), but an unpleasant one. Any techniques we're just not thinking of?
Solution
What about using AutoMapper and mapping your proxy to a real PatientDto object. Or just manually mapping it yourself.
OTHER TIPS
Just to add a more favourable alternative to mapping to a new object, you can just extract the underlying object.
I use a helper class to do this:
using Castle.DynamicProxy;
namespace Magna.Client.Common.Proxy
{
public class ProxyDtoUtils
{
public static T GetUnderlying<T>(T proxy)
{
return ProxyUtil.IsProxy(proxy) ? (T)ProxyUtil.GetUnproxiedInstance(proxy) : proxy;
}
}
}