ing
This commit is contained in:
parent
e92a9693a0
commit
219bb2f0c9
|
@ -5,6 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
cda "git.loafle.net/commons_go/di/annotation"
|
cda "git.loafle.net/commons_go/di/annotation"
|
||||||
|
cdur "git.loafle.net/commons_go/di/util/reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TypeDefinition struct {
|
type TypeDefinition struct {
|
||||||
|
@ -22,9 +23,53 @@ func (td *TypeDefinition) GetAnnotation(name string) cda.Annotation {
|
||||||
if nil == td.TypeAnnotations {
|
if nil == td.TypeAnnotations {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return td.TypeAnnotations[name]
|
return td.TypeAnnotations[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (td *TypeDefinition) GetAnnotationByType(at reflect.Type, includeEmbedding bool) cda.Annotation {
|
||||||
|
if nil == td.TypeAnnotations {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range td.TypeAnnotations {
|
||||||
|
if includeEmbedding {
|
||||||
|
if checkAnnotation(reflect.TypeOf(v), at) {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if at == reflect.TypeOf(v) {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkAnnotation(t reflect.Type, st reflect.Type) bool {
|
||||||
|
rt, _, _ := cdur.GetTypeInfo(t)
|
||||||
|
if reflect.Struct != rt.Kind() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < rt.NumField(); i++ {
|
||||||
|
f := rt.Field(i)
|
||||||
|
|
||||||
|
if f.Anonymous {
|
||||||
|
if f.Type == st {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if checkAnnotation(f.Type, st) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type FieldDefinition struct {
|
type FieldDefinition struct {
|
||||||
FieldName string
|
FieldName string
|
||||||
PkgName string
|
PkgName string
|
||||||
|
|
|
@ -73,14 +73,13 @@ func (cr *defaultComponentRegistry) RegisterType(t reflect.Type) {
|
||||||
}
|
}
|
||||||
cr.definitionByType[td.RealType] = td
|
cr.definitionByType[td.RealType] = td
|
||||||
|
|
||||||
// _ca := ca.(*cdia.ComponentAnnotation)
|
name := td.TypeName
|
||||||
ca := td.GetAnnotation(cdia.ComponentTag).(*cdia.Component)
|
|
||||||
|
|
||||||
name := ""
|
if a := td.GetAnnotationByType(reflect.TypeOf((*cdia.Component)(nil)), true); nil != a {
|
||||||
if nil != ca && "" != strings.Trim(ca.Name, " ") {
|
ca := a.(*cdia.Component)
|
||||||
name = ca.Name
|
if "" != strings.Trim(ca.Name, " ") {
|
||||||
} else {
|
name = ca.Name
|
||||||
name = td.TypeName
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if eTD, ok := cr.definitionByName[name]; ok {
|
if eTD, ok := cr.definitionByName[name]; ok {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user