MCPcopy Create free account
hub / github.com/golobby/container / bind

Method bind

container.go:44–76  ·  view source on GitHub ↗

bind maps an abstraction to concrete and instantiates if it is a singleton binding.

(resolver interface{}, name string, isSingleton bool, isLazy bool)

Source from the content-addressed store, hash-verified

42
43// bind maps an abstraction to concrete and instantiates if it is a singleton binding.
44func (c Container) bind(resolver interface{}, name string, isSingleton bool, isLazy bool) error {
45 reflectedResolver := reflect.TypeOf(resolver)
46 if reflectedResolver.Kind() != reflect.Func {
47 return errors.New("container: the resolver must be a function")
48 }
49
50 if reflectedResolver.NumOut() > 0 {
51 if _, exist := c[reflectedResolver.Out(0)]; !exist {
52 c[reflectedResolver.Out(0)] = make(map[string]*binding)
53 }
54 }
55
56 if err := c.validateResolverFunction(reflectedResolver); err != nil {
57 return err
58 }
59
60 var concrete interface{}
61 if !isLazy {
62 var err error
63 concrete, err = c.invoke(resolver)
64 if err != nil {
65 return err
66 }
67 }
68
69 if isSingleton {
70 c[reflectedResolver.Out(0)][name] = &binding{resolver: resolver, concrete: concrete, isSingleton: isSingleton}
71 } else {
72 c[reflectedResolver.Out(0)][name] = &binding{resolver: resolver, isSingleton: isSingleton}
73 }
74
75 return nil
76}
77
78func (c Container) validateResolverFunction(funcType reflect.Type) error {
79 retCount := funcType.NumOut()

Callers 8

SingletonMethod · 0.95
SingletonLazyMethod · 0.95
NamedSingletonMethod · 0.95
NamedSingletonLazyMethod · 0.95
TransientMethod · 0.95
TransientLazyMethod · 0.95
NamedTransientMethod · 0.95
NamedTransientLazyMethod · 0.95

Calls 2

invokeMethod · 0.95

Tested by

no test coverage detected