Dagger 2-不生成xxxModule_xxxFactory类

问题描述 投票:0回答:1

我正在一个多模块项目中使用Dagger2,而Im特别在一个模块上遇到了问题。

我有一个要插入存储库类的Room数据库。该模块看起来像这样:

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

谢谢

android kotlin dagger-2 dagger
1个回答
0
投票

编辑。

致其他遇到此问题的人。

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

依赖项是:

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

annotationProcessor,如果您使用的是JAVA而不是Kotlin。

© www.soinside.com 2019 - 2024. All rights reserved.