У меня есть объект, который я создаю из ответа веб-сервиса. Если я получу список этих объектов, у них будет минимальный объем информации (в приведенном ниже примере идентификаторы, Prop1 и Prop2 возвращаются в ответе списка). Если я получу объект по ID, возвращается полный набор информации, включая дочерние объекты в Prop3 и Prop4.Вручную установить значение Lazy <T>
public class Foo
{
public Guid ID { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public Lazy<IEnumerable<Bar>> Prop3 { get; }
public Lazy<IEnumerable<Bar2>> Prop4 { get; }
}
То, что я хочу быть в состоянии сделать, это использовать этот объект, когда частично построен, но если Prop3 или Prop4 доступны, сделать вызов на веб-сервиса, чтобы загрузить более детальные данные и заполнить как Prop3 и Prop4 ,
Если я использую Lazy, то я могу заполнить каждую собственность отдельно, обратившись к ней. Это приведет к идентичным вызовам webservice, чтобы каждый раз анализировать малую часть ответа. То, что я хочу быть в состоянии сделать, это создать каждый ленивое это:
Prop3 = new Lazy<IEnumerable<Foo>>(() => LoadDetailedInformation());
private void LoadDetailedInformation()
{
// Get info from web service
Prop3.Value = ParseProp3(response);
Prop4.Value = ParseProp4(response);
}
Так что в этом делать вид реализации ленивого, функция будет вызываться, когда ленивый объект доступен, но не на самом деле возвращают данные , Он будет выполнять некоторые вычисления и инициализировать все ленивые значения сразу.
Мне лучше просто сворачивать свой собственный «ленивый», или есть ли другой способ сделать это, не набирая тонны кода обертки для каждого свойства? Один из классов, для которого я делаю это, содержит около 20 объектов, которые должны быть обернуты таким образом, чтобы я не хотел писать фактические геттеры и сеттеры, если мне это удастся.