Как «действительно» преобразовать DynamicProxy обратно в исходный тип (для отправки через WCF) - PullRequest
2 голосов
/ 05 августа 2010

ОК, ситуация в том, что у нас есть класс PatientDto и DynamicProxy, сгенерированный Castle, PatientDtoProxy.

Мы используем этот прокси в клиенте Silverlight, затем хотим отправить егообратно на сервер с помощью вызова службы WCF.

Контракт службы WCF ожидает PatientDto (т. е. не прокси-сервер) и, как и ожидалось, взрывается, если вы попытаетесь отправить что-либо еще.1009 * По сути, мы чувствуем, что должны «привести» его обратно к PatientDto, чтобы заставить вещи работать ... но на самом деле, даже если вы приведете ссылку на PatientDto, это ничего не изменит -WCF по-прежнему видит объект в памяти как PatientDtoProxy и взрывается.

Очевидно, что делать глубокое копирование в новый 'up PatientDto вариант (и работает), но неприятноодин.Какие техники мы просто не думаем?

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Как насчет использования AutoMapper и сопоставления вашего прокси с реальным объектом PatientDto. Или просто вручную отобразите это.

0 голосов
/ 03 декабря 2015

Просто чтобы добавить более благоприятную альтернативу сопоставлению с новым объектом, вы можете просто извлечь базовый объект.

Я использую вспомогательный класс для этого:

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;
        }
    }
}
...