Beispiel #1
0
        /// <summary>
        /// RegistrationType => container.RegisterType<RegistrationType, type>
        /// Type => used by container to build up the object. It searches the [Dependency] in Type and fill them up in the object
        /// </summary>
        public override void PreBuildUp(ref BuilderContext context)
        {
            var stackExist = _stackFactory.Exist();
            Stack <ResolveStackEntry> stack = stackExist ? _stackFactory.Get() : _stackFactory.Set();
            var name = context.Name;
            var type = context.Type;

            // check cirular dep
            stack.Push(new ResolveStackEntry(type, name, !stackExist));

            if (stack.Skip(1).Any(ent => ent.ResolveType == type && ent.ResolveName == name))
            {
                var ex = new CircularDependencyException(string.Join("\r\n->", stack.Reverse().Select(t => $"type {t.ResolveType} (name: {t.ResolveName})").ToArray()));

                _stackFactory.Delete();

                throw ex;
            }

            base.PreBuildUp(ref context);
        }