public GenerationDepthGuard(
        ISpecimenBuilder builder,
        IGenerationDepthHandler depthHandler,
        IEqualityComparer comparer,
        int generationDepth)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }
        if (depthHandler == null)
        {
            throw new ArgumentNullException(nameof(depthHandler));
        }
        if (comparer == null)
        {
            throw new ArgumentNullException(nameof(comparer));
        }
        if (generationDepth < 1)
        {
            throw new ArgumentOutOfRangeException(nameof(generationDepth), "Generation depth must be greater than 0.");
        }

        this.Builder = builder;
        this.GenerationDepthHandler = depthHandler;
        this.Comparer        = comparer;
        this.GenerationDepth = generationDepth;
    }
 public GenerationDepthGuard(
     ISpecimenBuilder builder,
     IGenerationDepthHandler depthHandler)
     : this(
         builder,
         depthHandler,
         EqualityComparer <object> .Default,
         1)
 {
 }
 public GenerationDepthGuard(
     ISpecimenBuilder builder,
     IGenerationDepthHandler depthHandler,
     IEqualityComparer comparer)
     : this(
         builder,
         depthHandler,
         comparer,
         1)
 {
 }