我通过MVP模式完成了我的Android项目MainActivity。所以在我的MainPresenter中我想注入一个动态字符串,然后填充TextView例如:
class MyMainPresenter @Inject constructor(@StringForTextView dynamicString : String )
而StringForTextView注释限定符定义为:
import javax.inject.Qualifier
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class StringForTextView
然后我也有我的界面:
interface DynamicString {
@NonNull fun getDynamicString() : String
}
实现为:
data class SimpleDynamicString(val dynString: String) : DynamicString {
override fun getDynamicString(): String { return dynString }
}
然后在我的模块中:
@Provides
@StringForTextView
static DynamicString provideDynamicString(Application application)
{
return new SimpleDynamicString(application.getString(R.string.example_string));
}
问题是,我收到错误
错误:(51,2)错误:[dagger.android.AndroidInjector.inject(T)] @ com.ralf.example.injection.qualifiers.StringForTextView 没有@Annex-annotated,就不能提供java.lang.String 方法
我缺少什么?
答案 0 :(得分:1)
您希望在构造函数中期望DynamicString
,同时提供String
。你也应该在那里使用DynamicString
:
class MyMainPresenter @Inject constructor(
@StringForTextView dynamicString: DynamicString
)
此外,您可能希望通过使其成为val
的属性来注入该注入值。