Come “realmente” down-cast un back DynamicProxy al suo tipo originale (per inviare più di WCF)
-
26-09-2019 - |
Domanda
OK, la situazione è che abbiamo una classe, PatientDto
, e un DynamicProxy generato da Castello, PatientDtoProxy
.
Stiamo usando questo proxy nel client Silverlight, quindi vogliamo rispedirlo al server tramite una chiamata di servizio WCF.
Il contratto di servizio WCF si aspetta un PatientDto
(cioè non il proxy) e, come previsto, fa esplodere se si tenta di inviare qualsiasi altra cosa.
In sostanza, ci sentiamo come dovremmo essere "casting" di nuovo ad un PatientDto
per far funzionare le cose ... ma in realtà, anche se si lanci il riferimento verso il basso per PatientDto, non cambia nulla - WCF vede ancora l'oggetto in memoria come un PatientDtoProxy
e fa esplodere.
Ovviamente, facendo un profondo-copia in un PatientDto
new'ed up è un'opzione (e funziona), ma uno sgradevole. Eventuali tecniche non siamo solo pensando?
Soluzione
Cosa succede ad usare automapper e mappatura proxy per un oggetto PatientDto reale. O semplicemente manualmente la mappatura da soli.
Altri suggerimenti
Giusto per aggiungere un più favorevole alternativa alla mappatura a un nuovo oggetto, si può semplicemente estrarre l'oggetto sottostante.
Io uso una classe di supporto per fare questo:
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;
}
}
}