2

好的,情况是我们有一个类,PatientDto和一个由 Castle 生成的 DynamicProxy PatientDtoProxy,。

我们在 Silverlight 客户端中使用此代理,然后希望通过 WCF 服务调用将其发送回服务器。

WCF 服务合同需要一个PatientDto(即不是代理),并且如预期的那样,如果您尝试发送其他任何内容,它就会崩溃。

从本质上讲,我们觉得我们应该将其“转换”回 aPatientDto以使事情正常工作......但实际上,即使您将引用转换为 PatientDto,它也不会改变任何东西——WCF 仍然可以看到该对象在内存中作为一个PatientDtoProxy并炸毁。

显然,对新版本进行深度复制PatientDto是一种选择(并且确实有效),但令人不快。有什么我们没有想到的技术吗?

4

2 回答 2

1

使用 AutoMapper 并将您的代理映射到真实的 PatientDto 对象怎么样。或者只是自己手动映射它。

于 2010-08-05T16:08:51.047 回答
-1

只是为了添加一个更有利的替代映射到新对象,您可以提取底层对象。

我使用一个辅助类来做到这一点:

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;
        }
    }
}
于 2015-12-03T10:50:30.913 回答