有沒有辦法在客戶端的數據合同實體下使用基類?在生成的代碼中,它明確地從對象繼承。我有一個基礎類,我在我的應用程序體系結構中使用,以執行交叉任務。我想通過使他們的部分類來將我現有的業務對象集成到WCF服務中。除了我似乎無法使用我想要的基類之外,它的工作非常好。有沒有辦法在WCF的DataContract實體上使用自定義基類?
回答
您還有其他幾個選項可以將功能添加到客戶端的類中。使用哪一個取決於你正在尋找的用例。
如果您只想將新方法添加到該類的客戶端版本中,則可以使用部分類直接向生成的類添加新方法。
如果你想在客戶端有幾個對象共享一組方法以便它們可以多態訪問,那麼你可以使用partial類向定義新方法的類添加一個接口,創建一個幫助類提供方法定義,然後委託給實現接口的每個DataContract對象中的助手類。
public interface IDoStuff
{
void DoStuff()
}
public interface IDoStuffContext
{
int Data {get;}
string Value {set;}
}
public class DoStuffHelper
{
private IDoStuffContext _wrapped;
public DoStuffHelper(IDoStuffContext wrapped)
{
_wrapped = wrapped;
}
public void DoStuff() {
if(_wrapped.Data == 10) {
_wrapped.Value = "Hello World";
}
}
}
public partial class MyDataContract1 : IDoStuff
{
private DoStuffHelper _helper = new DoStuffHelper(this);
public void DoStuff() {
_helper.DoStuff();
}
}
public partial class MyDataContract2 : IDoStuff
{
private DoStuffHelper _helper = new DoStuffHelper(this);
public void DoStuff() {
_helper.DoStuff();
}
}
不,我不認爲這是可能的使用標準的代理生成器。 XSD代碼生成器不指定實際的基類,也不允許通過參數指定。
我相信你看到的輸出是由於CodeDom類用於做實際的代碼生成,它支持各種語言。看起來C#生成器在沒有類繼承的情況下,將其轉換爲Object
的顯式繼承。這是不幸的,因爲如果它不這樣做,你可以使用部分類來做你正在尋找的東西。
我相信最簡單的解決方案是使用搜索和替換,或者在更新服務引用後編寫一個宏來執行此操作。
這很煩人。我想知道這個明確的聲明是否有理由。我只需要改變我包含交叉功能的方式(也許是AOP - 開玩笑)。此外,它改變生成的代碼的不良形式。無論如何,我從來不會這樣做。 – Jordan
我相信這是CodeDom的一個特性,它不會爲它支持的每種語言提供完整的映射,並且傾向於在翻譯中丟失一些東西。完全同意重新生成代碼的修改。 –
在您的應用程序中創建服務上的基類,在其定義上添加幾個known types並在客戶端部分實現擴展它有意義嗎?
- 1. 有沒有辦法在第三方類型上創建WCF DataContract?
- 2. 有沒有辦法在WCF中進行自定義序列化?
- 3. 有沒有辦法在實體外定義NamedQueries?
- 4. 有沒有辦法自動更新jpa中的實體類?
- 5. 有沒有辦法使用Object.keys()來實現Nashorn JSObject的自定義實現?
- 6. 有沒有辦法自定義JLabel?
- 7. 有沒有辦法自定義Sharekit?
- 8. 有沒有辦法讓自定義友好的URL與WCF沒有IIS?
- 9. 有沒有辦法在ggplot中使用自定義線型
- 10. 有沒有辦法在PDF文件中使用自定義字體?
- 11. 有沒有辦法自定義實體查詢的默認行爲?
- 12. 有沒有辦法隱藏/自定義ChartJS上面的圖例?
- 13. 有沒有辦法在某些自定義HTML文本上使用assert_select?
- 14. 有沒有辦法使用Json.Net JsonSerializer自定義縮進字符?
- 15. 有沒有辦法使用AREL進行自定義關聯?
- 16. 有沒有辦法定義WPF自定義綁定?
- 17. 有沒有辦法讓自定義控件中的MainWindow不使用Application類?
- 18. 如何有WCF datacontract類有另一個datacontract類的對象
- 19. 有沒有辦法連接CSS和UI自定義類
- 20. 有沒有辦法將自定義類模板添加到Eclipse?
- 21. 有沒有辦法在自定義UIButton中調用TouchUpInside動作?
- 22. 有沒有辦法引用自定義類對象的一個屬性/方法?
- 23. WCF DataContract隱藏基類
- 24. 實體類型沒有定義密鑰
- 25. 有沒有辦法將OpenCV Mat_與自定義類一起使用?
- 26. 有沒有辦法自定義iPhone上現有的聯繫人應用程序?
- 27. 有沒有辦法在C++中定義函數體內的返回類型?
- 28. 有沒有辦法使用自定義字體保存在我們的Web目錄中的字體目錄?
- 29. 實體類型「EntityName」沒有定義鍵。定義此實體類型的密鑰
- 30. VB實體類型沒有定義鍵。定義此實體類型的密鑰
是的,這些都是我的想法。主要是幫手模式。我可能最終會做這樣的事情。並非所有的交叉問題都可以通過這種方式進行建模,而不需要大量的代碼冗餘,例如'INotifyPropertyChanged'。我的基類爲此提供了支持;幸運的是,代碼生成的實體也爲此提供了支持,但其他事情可能會針對基類專門調用該調用。我真的很想知道爲什麼它明確設置像這樣。我希望AOP真的成爲一件事情。 :( – Jordan
你是什麼意思「實際上成了一件事」。有很多框架支持.NET中的AOP:http://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspx。屬性更改通知是一個主要AOP的用例 –
是的,我知道,我希望看到一些與微軟開發環境相結合的東西,它非常流行,不是嗎?如果是這樣,我希望它不是。我也許我應該考慮在我的下一個項目中使用這些工具之一,這是一個基本決定,也是它在這個項目中的後期。 – Jordan