You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
699 B

// Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved.
package container
import (
"errors"
"fmt"
"reflect"
)
// 组件实例
type Instance reflect.Value
var ZeroInstance = Instance(reflect.ValueOf(nil))
// 获取调用器
// 参数
// 1.服务实例
// 返回值:
// 1.调用器
// 2.错误
func (instance Instance) GetCaller(methodName string) (Caller, error) {
if methodName == "" {
return nil, errors.New(fmt.Sprintf("方法名不能为空!"))
}
methodValue := reflect.Value(instance).MethodByName(methodName)
if methodValue == reflect.ValueOf(nil) {
return nil, errors.New(fmt.Sprintf("未找到方法!"))
}
return methodValue.Call, nil
}