Documentation ¶
Overview ¶
一切皆服务,制定向服务中心注册服务时需要实现的方法标准
Index ¶
- Constants
- type Container
- type NewInstanceFunc
- type ServiceProvider
- type ServicesContainer
- func (self *ServicesContainer) Bind(provider ServiceProvider) error
- func (engine *ServicesContainer) IsBind(key string) bool
- func (self *ServicesContainer) NewInstance(key string, params []interface{}) interface{}
- func (self *ServicesContainer) NewSingle(name string) interface{}
- func (self *ServicesContainer) PrintProviders() []string
Constants ¶
View Source
const Config = "config"
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Container ¶
type Container interface { // 绑定一个服务提供者,如果服务名称已经存在,会进行替换操作,返回 error // 服务注册其实跟 http 路由一样的原理 Bind(provider ServiceProvider) error // 判断服务名称是否已经绑定服务提供者,防止重复绑定 IsBind(name string) bool // 根据服务名称获取一个单例服务,如果这个服务名称未绑定服务提供者,那么会 panic, NewSingle(name string) interface{} // 根据服务名称获取一个非单例服务 // 它是根据服务提供者注册的启动函数和传递的 params 参数实例化出来的 // 这个函数在需要为不同参数启动不同实例的时候非常有用 NewInstance(name string, params []interface{}) interface{} }
服务中心,也就是服务的容器,提供绑定服务和获取服务的能力 注册是全局一次性的,获取服务是业务场景中频繁获发生的,所以将服务中心的引用(服务容器)注入到 context 跟 http 路由器一样,服务中心是为服务提供注册、初始化、路由功能
type NewInstanceFunc ¶
type NewInstanceFunc func(...interface{}) (interface{}, error)
定义如何创建一个新实例,所有服务容器的创建服务
type ServiceProvider ¶
type ServiceProvider interface { // 服务名称 Name() string // 决定是否在注册(程序启动)时实例化这个服务,true 则 bind() 时直接实例化,false 为手动获取实例的时候才进行实例化 InitOnBoot() bool // 服务调用者,实例化一个服务时传递的参数 Params(Container) []interface{} // 实例化一个服务提供者,并保存起来,这样服务中心不需要 import 就持有了各服务的实例 // 函数在 Golang 中是一等公民,各个服务提供者通过将他们实例创建的方法通过回调函数的形式传递过来, // 这样服务中心就在不需要 import 各个服务文件的情况下持有了服务的实力, // 然后服务中心会被注入到 context 中,那么就可以在任何有 context 的地方调用任何服务了 RegisterProviderInstance(Container) NewInstanceFunc // 实例化服务前的初始化操作,如果有 error 则不做服务实例化 BeforeInit(Container) error // 实例化服务后的操作,将实例传递过去做一些服务初始化操作 AfterInit(any) error }
定义服务提供者需要实现的接口
type ServicesContainer ¶
type ServicesContainer struct { Container // 显示要求 ServicesContainer 实现 Container 接口 // contains filtered or unexported fields }
服务容器的具体实现,其功能就是保存所有注册进来的服务和获取一个服务
func (*ServicesContainer) Bind ¶
func (self *ServicesContainer) Bind(provider ServiceProvider) error
将服务提供者的数据结构绑定到服务中心
func (*ServicesContainer) IsBind ¶
func (engine *ServicesContainer) IsBind(key string) bool
func (*ServicesContainer) NewInstance ¶
func (self *ServicesContainer) NewInstance(key string, params []interface{}) interface{}
不走单例,来一个实例化一个
func (*ServicesContainer) NewSingle ¶
func (self *ServicesContainer) NewSingle(name string) interface{}
实例化一个单例服务
func (*ServicesContainer) PrintProviders ¶
func (self *ServicesContainer) PrintProviders() []string
输出服务容器中注册的关键字
Click to show internal directories.
Click to hide internal directories.