我在一个多模块项目中使用Dagger2,而Im在一个模块上特别有问题。
我有一个Room数据库,正在将其注入到Repository类中。相应的模块如下所示:
@Module
class RoomModule(app: Application) {
private val database = AppDatabase.getInstance(app)
@Provides
@Singleton
fun provideModelDao() = database.getModelDao()
@Provides
@Singleton
fun provideAnotherModelDao() = database.getAnotherModelDao()
}
我的存储库类如下:
class ModelRepository @Inject constructor(private val modelDao: ModelDao) {
fun doFooWithModel() {
// Do foo
}
}
我的存储库类由UseCase类使用,如下所示:
class DoFooUseCase @Inject constructor(private val repository: ModelRepository) {
fun doFoo() {
repository.doFooWithModel()
}
}
最后,我在WebClient
实现类中使用了UseCase类。
class MyWebClient @Inject constructor(private val fooUseCase: DoFooUseCase): WebClient() {
// Web client stuff
}
在这里,没问题。
当我将WebClient注入活动中时,就会出现问题。
class WebActivity : AppCompatActivity() {
@Inject
lateinit var webClient: MyWebClient
override fun onCreate(savedStateInstance: Bundle?) {
super.onCreate(savedStateInstance)
AndroidInjection.inject(this)
webView.webViewClient = webClient
}
}
现在,在构建项目之后,出现此错误:
MyApplicationComponent.java:24: error: cannot find symbol:
RoomModule_ProvideModelDAOFactory;
但是,奇怪的是,当我从活动中删除@Inject
批注时,Dagger组件会正确构建。但显然,该应用程序无法正常工作,因为没有注入lateinit var
。
这些xxFactory
类是什么,如何使匕首生成它们?我在这里想念什么?我在其他项目中使用过像这样的匕首,以前没有这个问题。
谢谢
答案 0 :(得分:0)
编辑。
针对其他遇到此问题的人。
我在包含Room类的模块中缺少Dagger Compiler
依赖项。
依赖关系是:
kapt com.google.dagger:dagger-compiler:$dagger_version
或annotationProcessor
(如果您使用的是Java而不是Kotlin)。