public ViewModel LookupOrCreate(object key, Func <ViewModel> create) { if (key == null) { throw new ArgumentNullException("key"); } if (create == null) { throw new ArgumentNullException("create"); } _perfCounter.IncrementViewModelFetch(); var result = _cache.ContainsKey(key) ? _cache[key] : null; if (result != null) { return(result); } _perfCounter.IncrementViewModelCreate(); result = create(); _cache[key] = result; return(result); }