如何使GO Wire注入具有相同接口的结构

mf98qq94  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(184)

我在自动生成wire_gen.go时遇到问题(我可以手动创建,但希望使用自动生成)
我的项目具有服务、存储库和解析器
存储库-〉服务-〉解析器
ServiceRepository注入,ResolverService注入
这是我的代码
资料档案库

// Icon Repository
type GormRepository struct {
    db database.Database
}

func NewGormRepository(db database.Database) *GormRepository {
    return &GormRepository{db: db}
}

服务

// Icon Service (I have already Implemented all of these)
type Repository interface {
    FindAllIcon(*[]*model.Icon) error
    FindOneIcon(int64, *model.Icon) error
    CreateIcon(*model.Icon) error
    UpdateIcon(int64, *model.Icon) error
    DeleteIcon(int64, *model.Icon) error
}

type Service struct {
    repository       Repository
    validatorService service.ValidatorService
}

func NewIconService(repository Repository, validatorService service.ValidatorService) Service {
    return Service{
        repository:       repository,
        validatorService: validatorService,
    }
}

// Validator Service
func NewValidatorService() Service {
    return Service{}
}

type Service struct{}

解析器

// Resolver
type Resolver struct {
    iconService            icon.Service
}

func NewResolver(iconService icon.Service) *Resolver {
    return &Resolver{
        iconService:            iconService,
    }
}

wire.go

// wire.go
func InitializeResolver(db database.Database) (*graph.Resolver, error) {
    wire.Build(graph.NewResolver, icon.NewIconService, repository.NewGormRepository, service.NewValidatorService)
    return &graph.Resolver{}, nil
}

wire_gen.go(手动创建,未收到任何错误)

func InitializeResolver(db database.Database) (*graph.Resolver, error) {
    gormRepository := repository.NewGormRepository(db)
    validatorService := service.NewValidatorService()
    iconService := icon.NewIconService(gormRepository, validatorService)
    resolver := graph.NewResolver(iconService)
    return resolver, nil
}

这是我遇到的错误

wire: C:\Computer Programing\Samithiwat\samithiwat-app-backend\src\wire.go:43:1: inject InitializeResolver: no provider found for github.com/samithiwat/samithiwat-backend/src/service/i
con.Repository
        needed by github.com/samithiwat/samithiwat-backend/src/service/icon.Service in provider "NewIconService" (C:\Computer Programing\Samithiwat\samithiwat-app-backend\src\service\i
con\icon-decoration.service.go:24:6)

你们有什么想法来修复这个错误,提前感谢你们的帮助

toiithl6

toiithl61#

您需要将界面系结至实作界面的结构。

// wire.go
func InitializeResolver(db database.Database) (*graph.Resolver, error) {
    set := wire.NewSet(repository.NewGormRepository, wire.Bind(new(service.Repository), new(*repository.NewGormRepository)))
    wire.Build(set, graph.NewResolver, icon.NewIconService, service.NewValidatorService)
    return &graph.Resolver{}, nil
}

(PS:我没有在我的机器上测试过,可能包含语法/编译错误)

相关问题