github.com/zly-app/zapp@v1.3.3/service/service.go (about) 1 /* 2 ------------------------------------------------- 3 Author : zlyuancn 4 date: 2021/1/20 5 Description : 6 ------------------------------------------------- 7 */ 8 9 package service 10 11 import ( 12 "go.uber.org/zap" 13 14 "github.com/zly-app/zapp/core" 15 "github.com/zly-app/zapp/logger" 16 ) 17 18 // 服务建造者 19 type serviceCreator func(app core.IApp) core.IService 20 21 func (h serviceCreator) Create(app core.IApp) core.IService { 22 return h(app) 23 } 24 25 // 建造者列表 26 var creators = make(map[core.ServiceType]core.IServiceCreator) 27 28 // 注册服务建造者 29 func RegisterCreator(serviceType core.ServiceType, creator core.IServiceCreator) { 30 if _, ok := creators[serviceType]; ok { 31 logger.Log.Fatal("重复注册建造者", zap.String("serviceType", string(serviceType))) 32 } 33 creators[serviceType] = creator 34 } 35 36 // 注册服务建造者函数 37 func RegisterCreatorFunc(serviceType core.ServiceType, creatorFunc func(app core.IApp) core.IService) { 38 RegisterCreator(serviceType, serviceCreator(creatorFunc)) 39 } 40 41 // 构建服务 42 func MakeService(app core.IApp, serviceType core.ServiceType) core.IService { 43 if creator, ok := creators[serviceType]; ok { 44 return creator.Create(app) 45 } 46 app.Fatal("使用了未注册建造者的服务", zap.String("serviceType", string(serviceType))) 47 return nil 48 }