public bool TryGetItem <T>(string key, out T item) where T : class { if (_items.TryGetValue(key, out var obj)) { item = (T)obj; return(true); } if (_itemsInitialiser != null && _itemsInitialiser.TryGetItem <T>(key, out item)) { SetItem(key, item); return(true); } item = default; return(false); }