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))); } }
public EntityFactory(IEntityContentProvider contentProvider) { this.contentProvider = contentProvider; }
public Resolution(Entity entity, string key, IEntityContentProvider entityContentProvider) { this.entity = entity; this.key = key; this.entityContentProvider = entityContentProvider; }
public Entity(string type, IEntityContentProvider contentProvider, IEnumerable <object> values, IEnumerable <Entity> collection = null, Entity owner = null) { (object dataSource, bool isLazy, Func <object> lazyFunc, Type dsType)[] sorted = values