代码拉取完成,页面将自动刷新
package apps
import (
"fmt"
"gitee.com/megnhao/restful-api-demo/apps/host"
"github.com/gin-gonic/gin"
)
//IOC 容器层,管理所有的服务的实例
//1.Hostservice的实例必须注册过来,Hosteservice 才会有具体的实例,服务启动的时候
//2. http暴露模块,依赖IOC里面的hostservice
var (
// 40 Service, 怎么办? 写40个定义,
// 使用Interface{} + 断言进行抽象
HostService host.Service
// 维护当前所有的服务
implApps = map[string]ImplService{}
ginApps = map[string]GinService{}
)
func RegistryImpl(svc ImplService) {
//服务实例注册到svcs map中
if _, ok := implApps[svc.Name()]; ok {
panic(fmt.Sprintf("service %s has registried ", svc.Name()))
}
implApps[svc.Name()] = svc
//根据满足的接口来注册具体的服务
if v, ok := svc.(host.Service); ok {
HostService = v
}
}
// func GetHostImpl(name string) host.Service
//返回一个对象,任何类型都可以,使用时,由使用方进行断言
func GetImp(name string) interface{} {
for k, v := range implApps {
if k == name {
return v
}
}
return nil
}
func RegistryGin(svc GinService) {
//服务实例注册到svcs map中
if _, ok := ginApps[svc.Name()]; ok {
panic(fmt.Sprintf("service %s has registried ", svc.Name()))
}
ginApps[svc.Name()] = svc
}
func InitImpl() {
for _, v := range implApps {
v.Config()
}
}
//已经加载完成的gin app有哪些
func LoadGinApps() (names []string) {
for k := range ginApps {
names = append(names, k)
}
return
}
func InitGin(r gin.IRouter) {
for _, v := range ginApps {
//先初始化好所有的对象
v.Config()
}
//完成http Handler 的注册
for _, v := range ginApps {
//先初始化好所有的对象
v.Registry(r)
}
}
type ImplService interface {
Config()
Name() string
}
// 注册有gin编写的handler
//如果编写了http服务A,只要实现了Registry方法,就能把Handler注册给root Router
type GinService interface {
Registry(r gin.IRouter)
Config()
Name() string
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。