private object Construct(ConstruktionContext context, Blueprint blueprint)
        {
            if (depthReached() || recursionDetected())
            {
                return(!depthReached() && _settings.ThrowOnRecursion
                    ? throw new Exception($"Recursion Detected: {context.RequestType.FullName}")
                    : default(object));
            }

            _graph.Add(context.RequestType);

            var result = blueprint.Construct(context, this);

            _graph.Remove(context.RequestType);

            return(result);

            bool depthReached() => _graph.Count > _settings.MaxDepth;

            bool recursionDetected()
            {
                var depth = _graph.Count(x => context.RequestType == x);

                return(depth > _settings.RecursionDepth || (depth > 0 && _settings.ThrowOnRecursion));
            }
        }
        private object construct(ConstruktionContext requestContext, Blueprint blueprint)
        {
            if (_recurssionGuard.Contains(requestContext.RequestType))
            {
                return(default(object));
            }

            _recurssionGuard.Add(requestContext.RequestType);

            var result = blueprint.Construct(requestContext, this);

            _recurssionGuard.Remove(requestContext.RequestType);

            return(result);
        }