идти по проводам, соединяя зависимости - PullRequest
0 голосов
/ 07 января 2019

Я использую Google wire , чтобы связать зависимости в одном из моих проектов Go. До настоящего времени все зависимости были успешно подключены.

У меня есть следующий контейнер:

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

Здесь StructuredLogger, IDGenerator и Arango - интерфейс.

Набор контейнеров определяется следующим образом:

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-значное mockdb.NewMockedArango (idGenerator) (значение типа (* Github.com / tejashwi / каталог-менеджер-SVC / упак / вебсервис / arangodb / mockdb.MockedArango, ошибка)) где ожидается одно значение

1 Ответ

0 голосов
/ 08 января 2019

Подпись провода. Интерфейс 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)))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...