当使用@Named获取java.lang.String时,不能在没有@Inject构造函数或@Providers注释方法



每当我在代码中使用@Named annotation时,我总是会得到"如果没有@Inject构造函数或@Providers annotated方法,就无法提供java.lang.String。"此错误请找到下面的代码片段,但在检查代码之前,请让我明确我想要实现的目标以及我面临的确切问题。因此,我试图在我的模块文件中保留两个返回与String相同类型的函数。为此,我尝试使用@Named注释,之后我收到了上面提到的错误。如果我只保留一个String类型的函数,那么我的项目正在运行,没有任何错误。

这是我的组件类

@Singleton
@Component(modules = [GeneralModules::class])
interface MainComponent {
fun dummyString():String
}

这是我的模块类

@Module
class GeneralModules {
@Provides
@Singleton
@Named("name1")
fun getDummyString1(): String{
return "some name"
}
@Provides
@Singleton
@Named("name2")
fun getDummyString(): String{
return "some name"
}

}

这就是我在活动类中使用的方法

@Inject
@field:Named("name1")
lateinit var name1: String
@Inject
@field:Named("name2")
lateinit var name2: String

因此,如果我从模块文件中删除@Named,删除一个函数并从活动中删除@field:Named代码,它将运行时不会出现任何错误。

您可以将annotation classjavax.inject.Qualifier@Qualifier一起使用

限定符文件

@Qualifier
annotation class Name1
@Qualifier
annotation class Name2

模块类

@Module
class GeneralModules {
@Provides
@Singleton
@Name1
fun getDummyString1(): String{
return "some name"
}
@Provides
@Singleton
@Name2
fun getDummyString(): String{
return "some name"
}
}

活动类内的代码

@Inject
@Name1
lateinit var name1: String
@Inject
@Name2
lateinit var name2: String

相关内容

最新更新