package hero import ( "reflect" "github.com/kataras/iris/hero/di" ) func init() { di.DefaultHijacker = func(fieldOrFuncInput reflect.Type) (*di.BindObject, bool) { // if IsExpectingStore(fieldOrFuncInput) { // return &di.BindObject{ // Type: memstoreTyp, // BindType: di.Dynamic, // ReturnValue: func(ctxValue []reflect.Value) reflect.Value { // // return ctxValue[0].MethodByName("Params").Call(di.EmptyIn)[0] // return ctxValue[0].MethodByName("Params").Call(di.EmptyIn)[0].Field(0) // the Params' memstore.Store. // }, // }, true // } if !IsContext(fieldOrFuncInput) { return nil, false } // this is being used on both func injector and struct injector. // if the func's input argument or the struct's field is a type of Context // then we can do a fast binding using the ctxValue // which is used as slice of reflect.Value, because of the final method's `Call`. return &di.BindObject{ Type: contextTyp, BindType: di.Dynamic, ReturnValue: func(ctxValue []reflect.Value) reflect.Value { return ctxValue[0] }, }, true } di.DefaultTypeChecker = func(fn reflect.Type) bool { // valid if that single input arg is a typeof context.Context // or first argument is context.Context and second argument is a variadic, which is ignored (i.e new sessions#Start). return (fn.NumIn() == 1 || (fn.NumIn() == 2 && fn.IsVariadic())) && IsContext(fn.In(0)) } }