有没有办法在客户端的数据合同实体下使用基类?在生成的代码中,它显式地从object继承。我有一个基类,我在我的应用程序架构中使用它来执行交叉任务。我想通过使他们成为部分类来将我现有的业务对象集成到WCF服务中。它运行得非常好,除了我似乎无法使用我想要的基类。
答案 0 :(得分:1)
不,我不相信使用标准代理生成器是可行的。 XSD代码生成器不指定实际的基类,也不允许通过参数指定一个。
我相信你看到的输出是由于用于实际代码生成的CodeDom类,它们支持各种语言。看来C#生成器在没有类继承的情况下将其转换为Object
的显式继承。这是不幸的,因为如果不这样做,你可以使用部分课来做你想要的。
我认为最简单的解决方案是使用“搜索和替换”,或者在更新服务引用后编写宏来执行此操作。
答案 1 :(得分:0)
在您的应用程序中,在服务上创建基类,在其定义上添加一些known types并在客户端部分实现扩展它是否有意义?
答案 2 :(得分:0)
您还可以在客户端向类添加功能。使用哪一个取决于您正在寻找的用例。
如果您只想将新方法添加到类的客户端版本中,则可以使用分部类直接向生成的类添加新方法。
如果你想在客户端有多个对象共享一组方法,以便可以多态访问它们,那么你可以使用部分类向定义新方法的类添加一个接口,创建一个提供的辅助类方法定义,然后委托给实现ineterface的每个DataContract对象中的helper类。
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();
}
}