Beispiel #1
0
        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)));
            }
        }
Beispiel #2
0
 public EntityFactory(IEntityContentProvider contentProvider)
 {
     this.contentProvider = contentProvider;
 }
Beispiel #3
0
 public Resolution(Entity entity, string key, IEntityContentProvider entityContentProvider)
 {
     this.entity = entity;
     this.key    = key;
     this.entityContentProvider = entityContentProvider;
 }
Beispiel #4
0
 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