代码之家  ›  专栏  ›  技术社区  ›  mafu

如何在公共数据合同中使用内部构造函数?

  •  1
  • mafu  · 技术社区  · 15 年前

    我有几个这样的数据契约类:

    [DataContract]
    public class FooData
    {
        [DataMember]
        public string Name;
    
        // ... many more members
    
        public FooData (string name) // again, many more arguments
        {
            Name = name;
            // ...
        }
    }
    

    FooData 总是用来运输 Foo 对象,我想添加一个构造函数,它接受一个Foo对象并相应地设置所有字段,而不是手动执行( new FooData (myFoo.Name) ).

    但是,这需要FooData的用户包含Foo类型,它应该是服务器内部的。通常,这个问题可以通过使构造函数将Foo设置为内部来解决,但在我的例子中,FooData位于不同于Foo的程序集中。

    我该怎么处理?到目前为止,我的想法还包括使用接口而不是类来传输数据,或者使用“扩展构造函数”。有更好的主意吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Pablo Cibraro    15 年前

    只要不在标记为DataMember的公共属性中公开该类型,在构造函数中包含Foo类型就不应该是问题。WCF只负责序列化用DataMember标记的属性,因此您可以在内部使用数据协定中的服务器类型。但是,客户端将无法看到接收“Foo”类型的构造函数,因此它必须手动设置合同中的所有数据

    谢谢 帕布罗。

    推荐文章