是否可以使用WCF实现Lazy Logic?

时间:2014-09-06 09:24:22

标签: c# wcf

我有一个DataObject,可以看作是树:

[DataContract]
public class SomeDataContract
{
    [DataMember]
    private SomeCollection collection;
    public SomeCollection Collection
    {
        get
        {
            if (collection == null)
            { 

            }
        }
    }
}

[CollectionDataContract]
public class SomeCollection : List<SomeDataContract>
{
}

我不需要下载整棵树:)

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但我认为你要求的机制是WCF返回一个占位符对象,它进一步从服务器中检索真实数据,因为它在客户端使用(类似于Lazy<T>)。如果是这样,答案是否定的,WCF不直接提供这样的机制。

但是,您可以自己实现一些懒惰,并在客户端进一步调用以根据需要检索对象。例如:

[DataContract]
public class SomeDataContract
{
   [DataMember]
   public int Id {get ; set;}
}

如果您正在使用代理生成,它将在客户端生成SomeDataContract作为部分类。因此,您可以扩展它以添加Children属性:

public partial class SomeDataContract
{
   private IEnumerable<SomeDataContract> _children;
   public IEnumerable<SomeDataContract> Children
   {
       if(_children == null)
       {
           // call the WCF service, assuming such a method exists... 
           _children = GetChildren(this.Id);
       }

       return _children;
   }
}