Dagger未生成DaggerApplicationComponent,清理重建等操作无效如何解决
问题根因及修复方案
你代码中存在多处注解处理器无法识别的错误,导致Dagger无法生成对应实现类,按以下步骤逐一修复即可:
1. 补全Dagger核心依赖
你当前build.gradle只引入了Dagger Android扩展的依赖,缺失核心Dagger的编译依赖,添加如下配置:
implementation 'com.google.dagger:dagger:2.35.1' kapt 'com.google.dagger:dagger-compiler:2.35.1'
2. 修复AppModule的死循环逻辑
你现有的provideContext方法内部调用自身,属于无限递归的错误代码,直接阻断注解处理器的生成逻辑,修改为如下实现:
@Module class AppModule(private val application: Application) { @Provides @Singleton fun provideContext(): Context = application }
3. 修正Room实例的返回类型
provideRoom方法现在返回的是抽象类RoomDatabase,后续依赖注入时无法匹配到具体的AppDatabase实例,修改返回值类型:
@Provides @Singleton open fun provideRoom(context: Context): AppDatabase = Room.databaseBuilder( context, AppDatabase::class.java, DATABASE_NAME ).build()
4. 适配Kotlin语法的Module规则
Kotlin中普通类的方法默认是final修饰,Dagger无法处理final类型的@Provides方法,要么给所有@Provides方法加open修饰,要么直接将无构造参数的Module改为object类(更符合Kotlin规范):
@Module object NetworkModule { private val json = Json { ignoreUnknownKeys = true } private val client = OkHttpClient.Builder() .addInterceptor(TokenInterceptor) .build() @Provides @Singleton fun provideRetrofit(): Retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(json.asConverterFactory("application/json".toMediaType())) .client(client) .build() }
5. 调整Component初始化逻辑
修改后的AppModule需要传入Application实例,调整MyApplication中的初始化代码:
class MyApplication : Application() { val appComponent = DaggerApplicationComponent.builder() .appModule(AppModule(this)) .build() }
所有修改完成后执行一次Clean Project再Rebuild Project即可正常生成DaggerApplicationComponent类。
内容的提问来源于stack exchange,提问作者Evgeny Yurin
相关产品推荐
相关产品推荐

