我正在使用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 / catalog-manager-svc / pkg / webservice / arangodb / mockdb.MockedArango, 错误)),其中期望使用单个值
答案 0 :(得分:0)
wire.Interface的签名为
InterfaceValue(typ interface{}, x interface{})
在这里您需要传递两个单值参数。在第二个参数中,由于函数mockdb.NewMockedArango
返回2个值,因此您将传递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)))
}