func (s *InstancePool) GetInstance(instanceType reflect.Type, tctx Context, app Application, c *gin.Context, injectingMap map[reflect.Type]interface{}) (interface{}, map[reflect.Type]interface{}, map[reflect.Type]interface{}) {
	if v, ok := injectingMap[instanceType]; ok {
		return v, nil, nil
	}
	pool, ok := s.poolMap[instanceType]
	if !ok {
		panic("unknown service name")
	}
	service := pool.Get()
	injectingMap[instanceType] = service
	sharedInstance, toFreeInstance := DiAllFields(service, tctx, app, c, s.InstanceMapping(), injectingMap)
	return service, sharedInstance, toFreeInstance
}
GetInstance get service with di
package application
import (
	"reflect"
	"sync"
	"github.com/gin-gonic/gin"
)
type InstancePool struct {
	poolMap map[reflect.Type]*sync.Pool
	instanceTypeList []reflect.Type
	poolTags map[string]reflect.Type
	instanceMapping map[string]reflect.Type
}
func NewInstancePool() *InstancePool {
	result := new(InstancePool)
	result.poolMap = make(map[reflect.Type]*sync.Pool)
	result.poolTags = make(map[string]reflect.Type)
	result.instanceMapping = make(map[string]reflect.Type)
	return result
}
func (s *InstancePool) NewInstance(instanceType reflect.Type, instancePool *sync.Pool, instanceTags []string) {
	if _, ok := s.poolMap[instanceType]; ok {
		return
	}
	s.poolMap[instanceType] = instancePool
	s.instanceTypeList = append(s.instanceTypeList, instanceType)
	if len(instanceTags) > 0 {
		if instanceTags[0] != "" {
			s.poolTags[instanceTags[0]] = instanceType
		}
	}
}
func (s *InstancePool) GetInstanceType(tags string) []reflect.Type {
	if tags != "" {
		var types []reflect.Type
		if instance, ok := s.poolTags[tags]; ok {
			types = append(types, instance)
			return types
		}
		return types
	}
	return s.instanceTypeList
}
func (s *InstancePool) CheckInstanceNameIfExist(instanceName reflect.Type) bool {
	_, ok := s.poolMap[instanceName]
	return ok
}
func (s *InstancePool) InstanceDISelfCheck(app Application) {
	for instanceType, pool := range s.poolMap {
		DiSelfCheck(instanceType, pool, app.Logger(), app.InstancePool(), s.instanceMapping)
	}
	return
}