ing
This commit is contained in:
parent
17ddea24f4
commit
dc841686a6
6
annotation/component.go
Normal file
6
annotation/component.go
Normal file
|
@ -0,0 +1,6 @@
|
|||
package annotation
|
||||
|
||||
type Component struct {
|
||||
Names *[]string
|
||||
Scope *ScopeType
|
||||
}
|
6
annotation/inject.go
Normal file
6
annotation/inject.go
Normal file
|
@ -0,0 +1,6 @@
|
|||
package annotation
|
||||
|
||||
type Inject struct {
|
||||
Name *string
|
||||
Required *bool
|
||||
}
|
8
annotation/scope.go
Normal file
8
annotation/scope.go
Normal file
|
@ -0,0 +1,8 @@
|
|||
package annotation
|
||||
|
||||
type ScopeType int
|
||||
|
||||
const (
|
||||
ScopeTypeSingleton ScopeType = iota
|
||||
ScopeTypeTransiant
|
||||
)
|
2
glide.yaml
Normal file
2
glide.yaml
Normal file
|
@ -0,0 +1,2 @@
|
|||
package: git.loafle.net/commons_go/di
|
||||
import: []
|
28
registry/definition.go
Normal file
28
registry/definition.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
package registry
|
||||
|
||||
import "reflect"
|
||||
|
||||
type typeDefinition struct {
|
||||
pkgName string
|
||||
typeName string
|
||||
targetType reflect.Type
|
||||
realType reflect.Type
|
||||
|
||||
fields map[string]
|
||||
}
|
||||
|
||||
type fieldDefinition struct {
|
||||
pkgName string
|
||||
typeName string
|
||||
targetType reflect.Type
|
||||
realType reflect.Type
|
||||
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
DAO *DAO `di-annotation:""`
|
||||
}
|
||||
|
||||
type DAO struct {
|
||||
|
||||
}
|
|
@ -1,6 +1,11 @@
|
|||
package registry
|
||||
|
||||
import "reflect"
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
cdur "git.loafle.net/commons_go/di/util/reflect"
|
||||
)
|
||||
|
||||
type ComponentRegistry interface {
|
||||
RegisterType(t reflect.Type, name string) error
|
||||
|
@ -9,3 +14,36 @@ type ComponentRegistry interface {
|
|||
GetInstance(t reflect.Type) (interface{}, error)
|
||||
GetInstanceByName(name string) (interface{}, error)
|
||||
}
|
||||
|
||||
type defaultComponentRegistry struct {
|
||||
definitions map[string]reflect.Type
|
||||
}
|
||||
|
||||
func (cr *defaultComponentRegistry) RegisterType(t reflect.Type, name string) error {
|
||||
if nil == t {
|
||||
return fmt.Errorf("DI: t[reflect.Type] is nil")
|
||||
}
|
||||
if !cdur.IsTypeKind(t, reflect.Struct, true) {
|
||||
return fmt.Errorf("DI: t[reflect.Type] must be specified but is %v", t)
|
||||
}
|
||||
|
||||
rt, pkgName, tName := cdur.GetTypeName(t, true)
|
||||
cr.definitions[name] = rt
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cr *defaultComponentRegistry) RegisterFactory(i interface{}) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cr *defaultComponentRegistry) GetInstance(t reflect.Type) (interface{}, error) {
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (cr *defaultComponentRegistry) GetInstanceByName(name string) (interface{}, error) {
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
|
23
util/reflect/type.go
Normal file
23
util/reflect/type.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
package reflect
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func IsTypeKind(t reflect.Type, kind reflect.Kind, removePtr bool) bool {
|
||||
if reflect.Ptr == t.Kind() {
|
||||
if removePtr {
|
||||
return IsTypeKind(t.Elem(), kind, removePtr)
|
||||
}
|
||||
}
|
||||
|
||||
return kind == t.Kind()
|
||||
}
|
||||
|
||||
func GetTypeName(t reflect.Type) (realType reflect.Type, pkgName string, name string) {
|
||||
if reflect.Ptr == t.Kind() {
|
||||
return GetTypeName(t.Elem())
|
||||
}
|
||||
|
||||
return t, t.PkgPath(), t.Name()
|
||||
}
|
Loading…
Reference in New Issue
Block a user