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  }