2010-08-05 28 views
2

好的,情況是我們有一個類,PatientDto和由Castle生成的DynamicProxy,PatientDtoProxy如何「真正」將DynamicProxy恢復到原始類型(通過WCF發送)

我們在Silverlight客戶端中使用此代理,然後希望通過WCF服務調用將其發送回服務器。

WCF服務合同期望PatientDto(即不是代理服務器),並且如果您嘗試發送其他任何內容,正如預期的那樣。從本質上講,我們覺得我們應該將它「鑄造」回PatientDto以使事情發揮作用......但實際上,即使您將參考文獻歸類爲PatientDto,它也不會改變任何內容 - WCF仍然將內存中的對象視爲PatientDtoProxy並炸燬。

很明顯,做一個深入複製到新的PatientDto是一個選項(並且工作),但一個不愉快的。任何我們沒有想到的技術?

+0

它是一個基於接口的代理或基於類的嗎?如果後者,您的代理實例是否已經從PatientDto繼承? – 2010-08-05 16:52:24

+0

基於類,而且你是對的 - WCF仍然抱怨。我假設它使用對象本身的反射,並且看到它實際上是一個'PatientDtoProxy'...儘管我們已經將基準類型的引用鑄造了...這就是難題 – Bobby 2010-08-05 16:56:59

+1

是的,很棘手。理想情況下,您可以在基類上設置KnownTypes屬性以包含子類。顯然,這是不可能的動態創建的代理。 :( – 2010-08-06 01:08:11

回答

1

如何使用AutoMapper並將您的代理映射到真實的PatientDto對象。或者自己手動映射它。

+1

聽起來像我提到的後備選項 - 做一個從代理到基礎類型的內存中的新對象的深層複製..似乎是一個次優的解決方案不是嗎?一些就地演員將是理想......只是不知道這是否可能 – Bobby 2010-08-05 16:40:10

+1

沒有什麼關於最佳映射的地方 – 2010-11-16 21:49:39

+1

剛回來 - 回頭看深層複製可能是唯一的出路,所以最後得到一張支票,謝謝! – Bobby 2011-04-17 15:32:34

0

只是爲映射到新對象添加更有利的替代方法,您可以提取底層對象。

我使用一個輔助類來做到這一點:

​​