当前位置:  开发笔记 > 编程语言 > 正文

Dagger和Kotlin.Dagger不生成组件类

如何解决《Dagger和Kotlin.Dagger不生成组件类》经验,为你挑选了3个好方法。

我是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()
            }
        }
    }
}

}

@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如果我在Dagger中执行此DaggerAppComponent.builder().appModule(AppModule(app)).build()调用,则此类不是由Dagger生成的companion object.如果一个调用同一行任何由companion object匕首生成de class没有任何问题.

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

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



1> Deividi Cava..:

你需要在build.gradle中使用kapt处理器:

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'
    ...
}

此扩展将生成匕首的代码.

此外,对于较新的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'
    ...
}

您可以查看此项目以供参考



2> Plumbus..:

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

kapt {
    generateStubs = true
}

有了这个:

apply plugin: 'kotlin-kapt'

然后请务必立即更换使用的依赖annotationProcessorkapt.

例如,旧的方法是使用:

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

现在你使用:

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



3> Solidak..:

更新KOTLIN 1.1.4

generateStubs不再起作用了.随意使用最新的Kotlin进行构建,它会在Android Studio 的" 消息"部分告诉您不再需要它.这是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'
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有