Dagger和Kotlin。 Dagger不生成组件类

时间:2015-12-19 22:31:03

标签: 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:此接口包含此组件所需的所有方法。

现在,问题是如果我在DaggerAppComponent内执行DaggerAppComponent.builder().appModule(AppModule(app)).build()调用,则Dagger不会生成此companion object类。 如果companion object dagger生成de class而没有任何问题,则调用同一行。

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

我不知道如何在组件外部进行初始化。那么,还有其他替代解决方案,或者我做错了什么?。

4 个答案:

答案 0 :(得分:18)

我不知道这个更改何时发生,但是在Kotlin gradle插件的1.1.2上你替换了这个(在你的模块中build.gradle):

kapt {
    generateStubs = true
}

用这个:

apply plugin: 'kotlin-kapt'

然后确保将使用annotationProcessor的依赖项替换为kapt

例如,旧的方法是使用:

annotationProcessor (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)

现在你使用:

kapt (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)

答案 1 :(得分:11)

更新KOTLIN 1.1.4

generateStubs不再有用了。随意使用最新的Kotlin进行构建,它会在Android Studio的 Messages 部分告诉您不再需要它。这是Dagger2 for Android和Kotlin

的最新依赖列表
apply plugin: 'kotlin-kapt'

//...
// Other Gradle stuff
//...

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.4-3"

    compile 'com.google.dagger:dagger-android:2.12'
    kapt 'com.google.dagger:dagger-android-processor:2.12'
    compileOnly 'com.google.dagger:dagger:2.12'
    kapt 'com.google.dagger:dagger-compiler:2.12'
}

答案 2 :(得分:3)

此问题可以通过与原始答案不同的波纹管更改来修复

以下也可以很好地解决这个问题

带插件

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

和依赖

implementation "com.google.dagger:dagger:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version" 
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"

如需参考,请查看此Gist

答案 3 :(得分:0)

如果你对DaggerComponent有问题,你应该添加

apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}

build.gradle它将为kotlin生成dagger 2代码,否则项目将仅在Rebuild上构建