每当我在代码中使用@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 class
与javax.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