猿问

google/wire:这是单例模式的用例吗?

以下代码段声明了两个具有共同依赖关系的 google/wire 初始化器。强制只创建一个配置实例的最佳方法是什么?


我可以将共享依赖项向下传递给 InitializeStorageHandler 函数,但如果我的理解是正确的,那将破坏 DI 的目的。


当然,我也可以使用单例模式。我不确定这是否是做事的“Go-Way”。有最佳实践吗?


package api


import (

    "../storage"

    "../config"

    "github.com/google/wire"

)


func InitializeServer() (*Server, error) {

    panic(wire.Build(config.NewConfiguration, NewServer))

}


func InitializeStorageHandler() *StorageHandler {

    panic(wire.Build(config.NewConfiguration, storage.NewStorage, storage.NewService, NewStorageHandler))

}


梦里花落0921
浏览 136回答 0
0回答

忽然笑

当然,我也可以使用单例模式这与 wire 一致,如issue 77中提到的“Wire 非常适合提供单身人士”。正如第 21 期所讨论的那样:Wire 目前有意没有子组件的概念。在与Dagger团队交谈时,我们发现子组件和作用域引入了相当多的复杂性。正如您所说,您可以通过从创建它们的第一个注入器返回单例然后将它们传递给后面的注入器来获得几乎相同的行为。这具有使数据流显式化的好处,对于我们提出的示例,这似乎是一个净赢。也就是说,我们非常想知道人们将如何在实际应用程序中使用 Wire:如果这不能扩展,我们可能不得不重新审视。在更仔细地查看您的示例后,我意识到组件本身是有状态的(我忘记了有关 Dagger 的细节)。我上面的解释在很大程度上仍然适用:我们希望状态是明确的。在这种情况下,请查看Jefferson Otoni Lima的“单例模式如何与 Golang 一起工作” :或者该函数可以帮助在“Go-way”中安全地构建单例。sync.Onceinit()
随时随地看视频慕课网APP

相关分类

Go
我要回答