首页 > 解决方案 > 未生成 Android Kotlin Dagger 2 组件

问题描述

我不知道为什么重建项目后没有生成我的 DaggerComponent。

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class NewsScope

@NewsScope
@Component(
    dependencies = [BaseComponent::class],
    modules = [NewsModule::class]
)
interface NewsComponent {
    fun newsManager(): NewsManager
}

@NewsScope
@Component(
    dependencies = [BaseComponent::class],
    modules = [NewsModule::class]
)
interface NewsComponent {
    fun newsManager(): NewsManager
}

@Module
class NewsModule {

    @NewsScope
    @Provides
    fun provideMoshiConverterFactory(): MoshiConverterFactory {
        val moshi = Moshi.Builder().build()
        return MoshiConverterFactory.create(moshi)
    }

    @NewsScope
    @Provides
    fun provideNewsApi(okHttpClient: OkHttpClient): NewsApi {
        val moshi = Moshi.Builder().build()

        val retrofit = Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl(NewsApi.API_URL)
            .addCallAdapterFactory(RxJavaCallAdapterFactory
                .createWithScheduler(Schedulers.io()))
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .build()

        val retrofitApi = retrofit.create(RetrofitNewsApi::class.java)

        return RetrofitNewsApiImpl(retrofitApi)
    }

    @NewsScope
    @Provides
    fun provideNewsManager(newsApi: NewsApi): NewsManager {
        return NewsManager(newsApi)
    }
}

class NewsFragment : BaseFragment() {
    @Inject lateinit var newsManager: NewsManager private set


    override fun onCreate(savedInstanceState: Bundle?) {
        newsManager = DaggerNewsComponent.builder() 
            .baseComponent(baseComponent())
            .newsModule(NewsModule())
            .build().newsManager()
    }
}

标签: javaandroidkotlindagger-2dagger

解决方案


你应该kapt在旁边使用annotationProcessor

kapt 'com.google.dagger:dagger-android-processor:2.23.2'
kapt 'com.google.dagger:dagger-compiler:2.23.2'

apply plugin: 'kotlin-kapt'在您的顶部添加build.gradle


推荐阅读