Ejemplo n.º 1
0
Archivo: starter.go Proyecto: ssrl/gon
func instantiateAndInjectController(context gon.WebContext, controllerType reflect.Type) reflect.Value {
	// Instantiate a controller
	conValue := reflect.New(controllerType)
	conIndirect := reflect.Indirect(conValue)

	// Inject Params
	conIndirect.FieldByName("Params").Set(reflect.ValueOf(context.GetParams()))

	//
	// Inject beans
	// This loop tends to be slow. We should loop over field names and look-up a bean.
	//
	for beanName, setterFunc := range bean.Registry() {
		if _, ok := controllerType.FieldByName(beanName); ok {
			if field := conIndirect.FieldByName(beanName); field.IsValid() {
				field.Set(reflect.ValueOf(setterFunc()))
			}
		}
	}
	return conValue
}