繁体   English   中英

连线,连接依赖项

[英]go wire, wiring up the dependencies

我正在使用Google Wire连接我的Go项目之一中的依赖项。 到目前为止,所有依赖项都已成功连接。

我有以下容器:

type Container struct {
    Logger               logger.StructuredLogger
    IDGenerator          idgenerator.IDGenerator
    Arango               arangodb.Arango
}

这里的StructuredLoggerIDGeneratorArango是接口。

容器集定义如下:

var mockContainerSet = wire.NewSet(
    Container{},
    ResolveStructuredLogger,
    ResolveIDGenerator,
    ResolveArangoDB,
)

职能:

func ResolveStructuredLogger() logger.StructuredLogger {
    panic(wire.Build(wire.InterfaceValue(new(logger.StructuredLogger), logrusprovider.NewLogrusLogger(nil))))
}

func ResolveIDGenerator() idgenerator.IDGenerator {
    panic(wire.Build(wire.InterfaceValue(new(idgenerator.IDGenerator), examples.NewKSUIDGenerator())))
}

现在的问题是,当我想为Arango创建提供程序时。 Arango提供程序的工厂方法将IDGenerator作为参数。

func NewMockedArango(generator idgenerator.IDGenerator) (*MockedArango, error){
    if generator == nil {
        return nil , errors.New("mock arangodb expects a valid IDGenerator")
    }
    return &MockedArango{generator:generator}, nil
}

实现了arangodb.Arango所有功能。 我尝试了以下方法来创建提供程序:

func ResolveMockArangoDB(idGenerator idgenerator.IDGenerator) (arangodb.Arango, error) {
    panic(wire.Build(wire.InterfaceValue(new(arangodb.Arango), mockdb.NewMockedArango(idGenerator))))
}

但是导线抛出错误,我尝试了很多方法,但都没有成功进行设置。 有什么帮助吗?

错误:

2值的mathdb.NewMockedArango(idGenerator)(类型的值(* github.com / tejashwi / catalog-manager-svc / pkg / webservice / arangodb / mockdb.MockedArango,错误))

wire.Interface的签名为InterfaceValue(typ interface{}, x interface{})

在这里,您需要传递两个单值参数。 在第二个参数中,您要传递2值参数,因为函数mockdb.NewMockedArango返回了2个值。

您可以将功能ResolveMockArangoDB更改为:

func ResolveMockArangoDB(idGenerator idgenerator.IDGenerator) (arangodb.Arango, error) {
    mockedArango, err := mockdb.NewMockedArango(idGenerator)
    <HANDLE err>
    panic(wire.Build(wire.InterfaceValue(new(arangodb.Arango), mockedArango)))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM