-
Notifications
You must be signed in to change notification settings - Fork 0
/
iresolver.go
37 lines (34 loc) · 1.2 KB
/
iresolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package di
// IResolver is an object which knows how to resolve dependency chains
// and instantiate the dependencies according to their cache policies
type IResolver interface {
// Curry takes a func, resolves all parameters of the func which
// are known to the container, and returns a new func with those
// parameters supplied by the container.
//
// Explicitly:
// func foo(i int, dep Dep) int { ... }
// curryFoo, err := container.Curry(foo)
// if err { ... }
// val := curryFoo.(func(int) int)(4)
Curry(fn interface{}) (interface{}, *ErrResolve)
// Invoke resolves all known dependencies of func fn, and then
// attempts to execute the func.
//
// If an error is encountered while resolving the dependencies of
// fn an *ErrResolve is returned.
//
// If fn can be resolved and fn returns a single value which
// is an error, that is returned inside ErrResolve.Err
//
// Otherwise nil is returned
Invoke(fn interface{}) *ErrResolve
// Resolve attempts to resolve a known dependency. The parameter
// must be a pointer to an interface
// type known to the resolver
//
// Example:
// var dep Dep
// err := container.Resolve(&dep)
Resolve(ptrToIface interface{}) *ErrResolve
}