簡體   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