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); }