core

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 21, 2023 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

一切皆服务,制定向服务中心注册服务时需要实现的方法标准

Index

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 FrameContainer

func FrameContainer() *ServicesContainer

F全局服务中心,非 web 服务开发用

func New

func New() *ServicesContainer

创建一个服务容器

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

输出服务容器中注册的关键字

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL