public override Entity Resolve(Entity owner, string key, bool fallback = false) { using (cycleChecker = cycleChecker?.SpawnChild() ?? new CycleChecker <Resolution>(ExceptionTexts.ContentProviderCycle, () => cycleChecker = null)) { fallback = false; IEntityContentProvider provider = GetContentProvider(); if (provider == null) { fallback = true; provider = GetContentProvider(); } if (provider == null) { throw new ContentProviderException(key, owner); } cycleChecker.AddItem(new Resolution(owner, key, provider)); return(provider.Resolve(owner, key, fallback)); } IEntityContentProvider GetContentProvider() { return(contentResolvers.Where(r => !cycleChecker.HasItem(new Resolution(owner, key, r))) .FirstOrDefault(r => r.CanResolve(owner, key, fallback)) ?? contentResolvers.FirstOrDefault(r => r.CanResolve(owner, key, fallback))); } }