diff --git a/src/Orchard/ContentManagement/Utilities/LazyField.cs b/src/Orchard/ContentManagement/Utilities/LazyField.cs new file mode 100644 index 000000000..b03c59779 --- /dev/null +++ b/src/Orchard/ContentManagement/Utilities/LazyField.cs @@ -0,0 +1,40 @@ +using System; + +namespace Orchard.ContentManagement.Utilities { + public class LazyField { + private T _value; + private Func _loader; + private Func _setter; + + public T Value { + get { return GetValue(); } + set { SetValue(value); } + } + + public void Loader(Func loader) { + _loader = loader; + } + + public void Setter(Func setter) { + _setter = setter; + } + + private T GetValue() { + if (_loader != null) { + _value = _loader(_value); + _loader = null; + } + return _value; + } + + private void SetValue(T value) { + _loader = null; + if (_setter != null) { + _value = _setter(value); + } + else { + _value = value; + } + } + } +}