2009-05-04 154 views
3

我有一個類,ReportDef,這是一個具體的類,我用[DataContract][DataMember]屬性根據需要裝飾。 ReportDef在裝配A1以及我的ServiceContract,IReportService。然後我有另一個課程,UiReportDef,它來自ReportDef,並在彙編A2UiReportDef沒有服務關心的附加狀態。WCF繼承/多態性和序列化

我想用UiReportDef的實例調用我的服務。有沒有什麼辦法(沒有手動構建UiReportDefReportDef實例)做到這一點,而我的服務知道A2?我知道KnownType。我不想參考A2


編輯:這裏的一些情況下,可能使我的問題更容易理解。我的ServiceContract實現IReportService,它定義了一個方法,RunReport(ReportDef report)ReportDef裝飾有DataContract屬性,並有私人成員裝飾DataMemberUiReportDef在依賴於UI相關程序集等的程序集中。我沒有設計現有的類層次結構。我需要將ReportDefsUiReportDefs(如ReportDefs)傳遞給新服務。由於ReportDef是具體的,我希望序列化程序在沒有任何其他信息的情況下將UiReportDefs視爲ReportDefs

+0

現在,我加入一個構造函數的基類,它自身的實例和copyies國家有關。非常醜,但我需要繼續前進。 – JohnOpincar 2009-05-04 23:19:29

回答

-3

WCF不是多態的,因爲它不是面向對象的。因此這是不可能的。

+0

說wha? – 2009-05-05 09:39:30

+0

? 爲什麼-1?我確實回答了你的問題。 – 2009-05-05 11:16:56

2

我不明白你的問題。

但我想我現在明白它的一部分,你想要反彙編一個沒有參考它的程序集中的對象?

如果是這樣,你不能,除非你願意做一大堆的反思,並保持它定義/爲「對象」

常見的方式做到這一點參考,並試圖解釋我以前的答案是你應該使用一個可以被客戶端/服務器引用的接口。

通常的做法是創建存根組件,除此之外只包含接口。

或者當你對你的問題的評論建議,你可以使用DTO對象。 http://en.wikipedia.org/wiki/Data_Transfer_Object