Как "действительно" преобразовать DynamicProxy обратно в исходный тип (для отправки через WCF)
ОК, у нас есть класс, PatientDto
и DynamicProxy, сгенерированный Castle, PatientDtoProxy
,
Мы используем этот прокси в клиенте Silverlight, а затем хотим отправить его обратно на сервер с помощью вызова службы WCF.
Контракт на обслуживание WCF предполагает PatientDto
(т.е. не прокси) и, как ожидается, взрывается, если вы пытаетесь отправить что-нибудь еще.
По сути, мы чувствуем, что должны "отбросить" его обратно к PatientDto
чтобы заставить вещи работать... но в действительности, даже если вы приведете ссылку к PatientDto, это ничего не изменит - WCF по-прежнему видит объект в памяти как PatientDtoProxy
и взрывается.
Очевидно, что делать глубокую копию в новом PatientDto
вариант (и работает), но неприятный. Какие техники мы просто не думаем?
2 ответа
Как насчет использования AutoMapper и сопоставления вашего прокси с реальным объектом PatientDto. Или просто вручную сопоставить это.
Просто чтобы добавить более благоприятную альтернативу сопоставлению с новым объектом, вы можете просто извлечь базовый объект.
Я использую вспомогательный класс для этого:
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;
}
}
}