2010-02-17 52 views
2

我寫一個大型Silverlight應用程序之間的域模型。 我目前正在編寫數據檢索元素。問題分享WCF和Silverlight項目

我現在已經encoutered和問題。

我有一個用於保存對象的公共項目,該項目由UI和WCF服務引用。 UI需要INotifyPropertyChanged用於綁定目的。

現在WCF必須使用相同的對象,但我得到一個編譯器錯誤說

"The type 'System.ComponentModel.INotifyPropertyChanged' is defined in an assembly that is not referenced."

編輯:該錯誤是在WCF服務。

我想要一個對象類,我該如何解決這個問題?

diagram http://www.pcbuyersguide.co.za/picture.php?albumid=19&pictureid=1708

感謝 -Oliver

+0

奧利弗,一個燈泡來了。我沒有處理這一段時間。看到我的答案。你應該改變問題的標題,如「WCF和Silverlight項目之間的問題共享域模型」 – 2010-02-17 15:51:15

+0

沒有人回答我的問題,所以我怎麼能標記答案.... – Oliver 2010-02-25 12:17:06

+0

@奧利弗..呃...是的。你的問題已被回答。 ;-) 2月17日17:00。點擊鏈接並查找「鏈接Silverlight程序集中的文件」。 – 2010-02-25 16:12:53

回答

3

如果您打算使用相同的源代碼,您的實體(域)的clr和silverlight項目都需要使用2個項目,因爲Silverlight程序集與CLR程序集不同。

將Silverlight類庫項目添加到您的解決方案中,名稱並不重要,但我通常只使用XXXX_SL。

現在,您將從clr項目'添加現有項目'中的所有源文件,但注意打開或選擇按鈕上的下拉菜單?點擊該按鈕並點擊「添加爲鏈接」或其他地方顯示的內容。

您現在正在爲兩個項目使用相同的源代碼,並且您的解決方案將進行編譯。

有可能是沿途的一些小的調整,但是,將設置你在正確的道路上..

Here is some reference material

+0

對不起,我忘了提及在編譯WCF服務時發生錯誤。 編輯的第一篇文章 – Oliver 2010-02-17 11:29:51

+0

@Oliver:好System.ComponentModel.INotifyPropertyChanged生活在系統(mscorlib.dll),所以...你應該在沒有對系統的引用的機會,添加它。那會很奇怪,但可能會發生。 – 2010-02-17 12:08:32

+0

我已經添加了System.ComponentModel使用語句,問題仍然存在。這就是爲什麼我張貼,因爲它看起來不正確,我想知道我是否錯過了一些東西。 – Oliver 2010-02-17 12:31:07

0

你加在編譯項目參考System.ComponentModel

0

我發現了一個方法here,允許一個創建在該CLR類服務側然後可以從服務引用作爲類與INotifyPropertyChanged的和的ObservableCollection生成使用所生成的對象。

這解決了客戶端/服務器邊界的直接問題,但符合我的解決方案,因爲爲了使用生成的對象,您需要服務引用。但我有一個ProxyClass,做說話到WCF所以我不能看到這些傳遞對象類型回視圖模型的方式。

我看到一些人已經寫了mapper類,但這遠非理想,因爲我必須爲每個POCO對象(客戶端類,服務器DTO類,mapper)編寫3個類。

還有更多建議嗎?