quintodrome/utils/graph.go

38 lines
657 B
Go
Raw Normal View History

package utils
import (
"reflect"
2016-03-08 14:33:35 -09:00
"github.com/karlkfi/inject"
)
var Graph inject.Graph
var (
definitions map[reflect.Type]interface{}
)
2016-03-08 14:33:35 -09:00
func DefineSingleton(ptr interface{}, constructor interface{}) interface{} {
typ := reflect.TypeOf(ptr)
2016-03-08 14:33:35 -09:00
provider := inject.NewAutoProvider(constructor)
if _, found := definitions[typ]; found {
ptr = definitions[typ]
} else {
definitions[typ] = ptr
}
Graph.Define(ptr, provider)
return ptr
}
2016-03-11 11:16:17 -09:00
func ResolveDependencies(ptrs ...interface{}) {
for _, p := range ptrs {
inject.ExtractAssignable(Graph, p)
}
}
func init() {
definitions = make(map[reflect.Type]interface{})
Graph = inject.NewGraph()
}