comments about the service locator
This commit is contained in:
parent
3468baaa84
commit
2f35c08afd
1 changed files with 12 additions and 0 deletions
|
|
@ -24,6 +24,13 @@ type Locator struct {
|
|||
mutex sync.RWMutex
|
||||
}
|
||||
|
||||
// NewLocator creates a new locator to register services
|
||||
// Usage:
|
||||
//
|
||||
// locator := service.NewLocator()
|
||||
// service.Set[db.Queries](locator, service.Singleton, db.Provide)
|
||||
//
|
||||
// service.Get[db.Queries](locator)
|
||||
func NewLocator() *Locator {
|
||||
return &Locator{
|
||||
services: make(map[string]Provider),
|
||||
|
|
@ -44,6 +51,9 @@ func (l *Locator) getCache(key string) any {
|
|||
return l.cache[key]
|
||||
}
|
||||
|
||||
// Get returns a service from the locator
|
||||
// If the service is not found, log.Fatalf is called
|
||||
// If the service is a singleton, it will be cached after first invocation
|
||||
func Get[T any](locator *Locator) *T {
|
||||
locator.mutex.RLock()
|
||||
i := new(T)
|
||||
|
|
@ -70,6 +80,8 @@ func Get[T any](locator *Locator) *T {
|
|||
return cb
|
||||
}
|
||||
|
||||
// Set registers a service with the locator
|
||||
// If the service is a singleton, it will be cached after first invocation of Get
|
||||
func Set[T any](locator *Locator, lifecycle Lifecycle, value func() *T) {
|
||||
t := reflect.TypeOf(value)
|
||||
rt := t.Out(0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue