1 Star 0 Fork 0

megnhao / restful-api-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
app.go 1.99 KB
一键复制 编辑 原始数据 按行查看 历史
megnhao 提交于 2022-05-11 22:50 . 添加列表页的接口
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
}
Go
1
https://gitee.com/megnhao/restful-api-demo.git
git@gitee.com:megnhao/restful-api-demo.git
megnhao
restful-api-demo
restful-api-demo
e06e71524eb4

搜索帮助