gpt4 book ai didi

java - 在模块依赖中声明named的提供方法

转载 作者:行者123 更新时间:2023-12-03 23:42:57 25 4
gpt4 key购买 nike

我的项目有以下设置

@Module
abstract class CoreModule {
@Provides
@Named("text1")
fun textOne() = "text1"

@Provides
@Named("text2")
fun textTwo() = "text2"
}

@Component(modules=[CoreModule::class])
interface CoreComponent{
@Named("text1")
fun textOne(): String
}

@Component(
dependencies = [CoreComponent::class]
modules=[AppModule::class]
)
interface AppComponent()

@Module()
class AppModule {
fun getStringDouble(@Named("text1") text1: String) = text1 + text1
}
这里我有 2 个组件 CoreComponent提供对 AppComponent 的依赖项.现在我只想向 AppComponent 提供 text1 .
由于我添加了 @Named("text1")CoreComponent表示要提供给 AppComponent 的字符串.它迫使我使用 @Named("text1")在 AppModule 中也是如此,这是我不想要的。
如何在 CoreComponent 中创建提供方法仅向 AppComponent 提供 text1这样,我就不必使用 @Named无处不在 AppComponent

最佳答案

最简单的解决方案可能是简单地在不同的键下绑定(bind)/提供它,一个普通的 String在你的例子中。

@Binds // bind it without any qualifier
fun plainText1(@Named("text1") text1: String) : String

如果您确实对同一类型有多个值,那么从长远来看,限定符可能会更容易使用,因为它们允许您正确命名所使用的键。
请记住,您也可以创建自己的限定符,而不必使用 @Named ,它只是默认可用。

完全替代您的设置是使用 (Sub)components for encapsulation这将允许您只返回生成的值而不绑定(bind)整个组件依赖项。

关于java - 在模块依赖中声明named的提供方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64647917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com