public object Create(object request, ISpecimenContext context) { if (request is SeededRequest) { int currentDepth = -1; var requestsForCurrentThread = this.GetMonitoredRequestsForCurrentThread(); if (requestsForCurrentThread.Count > 0) { currentDepth = requestsForCurrentThread.Max(x => x.Depth) + 1; } DepthSeededRequest depthResquest = new DepthSeededRequest(((SeededRequest)request).Request, ((SeededRequest)request).Seed, currentDepth); if (depthResquest.Depth >= this.GenerationDepth) { return(HandleGenerationDepthLimitRequest(request, depthResquest.Depth)); } requestsForCurrentThread.Push(depthResquest); try { return(this.Builder.Create(request, context)); } finally { requestsForCurrentThread.Pop(); } } else { return(this.Builder.Create(request, context)); } }
public object Create(object request, ISpecimenContext context) { if (!(request is SeededRequest seededRequest)) { return(_builder.Create(request, context)); } var currentDepth = -1; var requestsForCurrentThread = GetMonitoredRequestsForCurrentThread(); if (requestsForCurrentThread.Count > 0) { currentDepth = requestsForCurrentThread.Max(x => x.Depth) + 1; } var depthRequest = new DepthSeededRequest(seededRequest.Request, seededRequest.Seed, currentDepth); if (depthRequest.Depth >= _generationDepth) { return(new OmitSpecimen()); } requestsForCurrentThread.Push(depthRequest); try { return(_builder.Create(seededRequest, context)); } finally { requestsForCurrentThread.Pop(); } }
public object Create(object request, ISpecimenContext context) { if (request is SeededRequest) { int currentDepth = 0; var requestsForCurrentThread = GetMonitoredRequestsForCurrentThread(); if (requestsForCurrentThread.Count > 0) { currentDepth = requestsForCurrentThread.Max(x => x.Depth) + 1; } DepthSeededRequest depthRequest = new DepthSeededRequest(((SeededRequest)request).Request, ((SeededRequest)request).Seed, currentDepth); if (depthRequest.Depth >= GenerationDepth) { var parentRequest = requestsForCurrentThread.Peek(); depthRequest.MaxDepth = parentRequest.Depth + parentRequest.GenerationLevel; if (!(parentRequest.ContinueSeed && currentDepth < depthRequest.MaxDepth)) { return(HandleGenerationDepthLimitRequest(request, depthRequest.Depth)); } } requestsForCurrentThread.Push(depthRequest); try { return(Builder.Create(request, context)); } finally { requestsForCurrentThread.Pop(); } } else { return(Builder.Create(request, context)); } }