public TValue GetValue(IBehaviorContext context) { RequireInitialized(); if (!_cache.HasValue(context)) { if (_isProviding.GetWithDefault(context, false)) { // This check is important to avoid the following endless recursion: // 1. GetValue calls ProvideValue // 2. ProvideValue directly or indirectly calls GetValue // 3. GetValue calls Provide value because the cache is not set yet. // 4. ProvideValue calls GetValue again // // The alternative would be to return default(TValue) but it is better // to avoid this situation altogehter. throw new InvalidOperationException(EViewModels.ValueAccessedWithinProvideValue); } _isProviding.Set(context, true); TValue value = ProvideValue(context); _cache.Set(context, value); _isProviding.Clear(context); OnInitialize(context); } return(_cache.Get(context)); }
private IEnumerable <TItemSource> GetSourceItems(IBehaviorContext context) { if (!_shouldCacheSourceCollection) { IEnumerable <TItemSource> source = this.GetValueNext <IEnumerable <TItemSource> >(context); return(source); } if (!_collectionSourceCache.HasValue(context)) { IEnumerable <TItemSource> source = this.GetValueNext <IEnumerable <TItemSource> >(context); _collectionSourceCache.Set(context, source); } return(_collectionSourceCache.Get(context)); }
public void BeginValidation(IBehaviorContext context, ValidationController controller) { _validationController.Set(context, controller); this.BeginValidationNext(context, controller); }
private void CachePotentiallyInvalidValue(IBehaviorContext context, TValue value) { _invalidValueCache.Set(context, value); }