sing/service/registry.go
2023-04-21 17:08:54 +08:00

35 lines
671 B
Go

package service
import (
"sync"
)
type Registry interface {
Register(serviceType any, service any) any
Get(serviceType any) any
}
func NewRegistry() Registry {
return &defaultRegistry{
serviceTypes: make(map[any]any),
}
}
type defaultRegistry struct {
serviceTypes map[any]any
access sync.RWMutex
}
func (r *defaultRegistry) Register(serviceType any, service any) any {
r.access.Lock()
defer r.access.Unlock()
oldService := r.serviceTypes[serviceType]
r.serviceTypes[serviceType] = service
return oldService
}
func (r *defaultRegistry) Get(serviceType any) any {
r.access.RLock()
defer r.access.RUnlock()
return r.serviceTypes[serviceType]
}