Dagger 2-不生成xxxModule_xxxFactory类

时间:2019-11-09 00:29:30

标签: android kotlin dagger-2 dagger

我在一个多模块项目中使用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类是什么,如何使匕首生成它们?我在这里想念什么?我在其他项目中使用过像这样的匕首,以前没有这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

编辑。

针对其他遇到此问题的人。

我在包含Room类的模块中缺少Dagger Compiler依赖项。

依赖关系是:

kapt com.google.dagger:dagger-compiler:$dagger_version

annotationProcessor(如果您使用的是Java而不是Kotlin)。