code: func NewAutoProvider(constructor interface{}) Provider {
  	fnValue := reflect.ValueOf(constructor)
  	if fnValue.Kind() != reflect.Func {
  		panic("constructor is not a function")
  	}
  
  	fnType := reflect.TypeOf(constructor)
  	if fnType.NumOut() != 1 {
  		panic("constructor must have exactly 1 return value")
  	}
  
  	return autoProvider{
  		constructor: constructor,
  	}
  }
docs: // NewAutoProvider specifies how to construct a value given its constructor function.
  // Argument values are auto-resolved by type.