Как "действительно" преобразовать 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;
        }
    }
}
Другие вопросы по тегам