如果使用 wire 初始化两个相同类型的变量,会报以下错误,
BaseProviderSet has multiple bindings for *gorm.io/gorm.DB
解决方式,先对变量定义新类型,最后使用的时候再转换成原来的类型。
伪代码如下,
type DB1 *gorm.DB
func NewDB1() DB1{
var db *gorm.DB
return db
}
type DB2 *gorm.DB
func NewDB2() DB2{
var db *gorm.DB
return db
}
type Injector struct {
DB1 DB1
DB2 DB2
}
var BaseProviderSet = wire.NewSet(
NewDB1,
NewDB2,
)
var AppSvcProvider = wire.NewSet(NewAppSvc)
type AppService struct {
DB1 *gorm.DB
DB2 *gorm.DB
}
func NewAppSvc(db1 DB1, db2 DB2) (*AppService, error) {
cronParser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor)
svc := &AppService{
DB1: db1,
DB2: db2,
}
return svc, nil
}