code: func (p autoProvider) Provide(g Graph) reflect.Value {
  	fnType := reflect.TypeOf(p.constructor)
  
  	argCount := fnType.NumIn()
  	args := make([]reflect.Value, argCount, argCount)
  	for i := 0; i < argCount; i++ {
  		argType := fnType.In(i)
  		values := g.ResolveByType(argType)
  		if len(values) > 1 {
  			panic(fmt.Sprintf("more than one defined pointer is assignable to the provider argument %d of type (%v)", i, argType))
  		} else if len(values) == 0 {
  			panic(fmt.Sprintf("no defined pointer is assignable to the provider argument %d of type (%v)", i, argType))
  		}
  		args[i] = values[0]
  	}
  
  	return reflect.ValueOf(p.constructor).Call(args)[0]
  }
docs: // Provide returns the result of executing the constructor with argument values resolved by type from a dependency graph