code: func (d *definition) Resolve(g Graph) reflect.Value {
  	if d.value != nil {
  		// already resolved
  		return *d.value
  	}
  
  	value := d.provider.Provide(g)
  
  	obj, ok := value.Interface().(Initializable)
  	if ok && obj != nil {
  		obj.Initialize()
  	}
  
  	// cache the result
  	d.value = &value
  
  	// update the ptr value
  	reflect.ValueOf(d.ptr).Elem().Set(value)
  
  	return value
  }
docs: // Resolve calls the provider, initializes the result, and populates the pointer with the result value