kotlin - Dagger 和 Kotlin 。 Dagger 不生成组件类

标签 kotlin dagger-2

我是 kotlin 和 Dagger 的新手。我有一个小问题,我不知道如何解决,也没有找到解决方案。

这就是我所拥有的:

@Module
class AppModule (app: Application) {
    private var application: Application;

    init {
        this.application = app;
    }

    @Provides fun provideApplication(): Application? {
        return application;
    }

    @Provides fun provideResources(): Resources? {
        return application.resources;
    }
}

@Singleton
@Component(modules =  arrayOf(AppModule::class))
interface AppComponent: AppComponentBase {

    public class Initializer {
        private constructor(){}

        companion object {
            fun Init(app: Application): AppComponent? {
                return DaggerAppComponent.builder().appModule(AppModule(app)).build()
            }
        }
    }
}

AppComponentBase:该接口(interface)包含该组件所需的所有方法。

现在,问题是如果我这样做 DaggerAppComponent.builder().appModule(AppModule(app)).build()DaggerAppComponent.builder().appModule(AppModule(app)).build()companion object 中的 code> 调用。 如果调用同一行任何由 companion object Dagger 生成 de 类没有任何问题。

我寻找解决方案的另一件事是创建另一个具有相同结构的不同类,并将 DaggerAppComponent 作为内部对象导入,我也发生了同样的结果。

我没有在外面初始化组件。那么,还有其他替代解决方案,或者我做错了什么?

最佳答案

您需要拥有 kapt processor在 build.gradle 中:

kapt {
    generateStubs = true
}

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}

这个扩展会生成 Dagger 的代码。

此外,对于较新的 gradle 版本,您还可以在 build.gradle 中应用该插件:

apply plugin: 'kotlin-kapt'

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}

您可以查看this project供引用

关于kotlin - Dagger 和 Kotlin 。 Dagger 不生成组件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34376061/

相关文章:

spring - 是否可以将 Spring HATEOAS WebFluxLinkBuilders 与 Kotlin 协程一起使用?

kotlin - 我如何使用集合运算符在 Kotlin 中按日期删除对象列表中的重复项?

Kotlin的逻辑 'and'没有短路?

dagger-2 - Dagger 1 到 2 迁移 - 成员注入(inject)方法只能返回注入(inject)的类型或 void

java - 如何在不强制消费应用程序使用 Dagger 的情况下构建基于 Dagger 的 Android 库?

kotlin - 为什么我的通用 Kotlin 函数中的此转换未被选中?

java - NfcAdapter 不可为空,但由@Provides @Singleton @javax.annotation.Nullable android.nfc.NfcAdapter 提供

android - 创建要在 src/test 和 src/androidTest 之间共享的 Dagger 2 组件

android - 与模拟器和 Web 相比,真实 Android 设备中的 Retrofit 响应时间更慢

java - Dagger : java. lang.NoSuchMethodError : com. google.common.collect.SetMultimap.forEach(Ljava/util/function/BiConsumer;)V