如果没有@ Provide-annotated方法,则无法提供Dagger AndroidInjector

时间:2018-01-30 12:52:48

标签: android kotlin dagger-2 dagger

我通过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   方法

我缺少什么?

1 个答案:

答案 0 :(得分:1)

您希望在构造函数中期望DynamicString,同时提供String。你也应该在那里使用DynamicString

class MyMainPresenter @Inject constructor(
    @StringForTextView dynamicString: DynamicString
)

此外,您可能希望通过使其成为val的属性来注入该注入值。