I'm new with kotlin and Dagger. I have a little problem that I do not how to solve and I don't find a solution.
So this is what I have
@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
: This interface contain all the methods needed by this component.
Now, the problem is that this DaggerAppComponent
class is not generated by Dagger if I do this DaggerAppComponent.builder().appModule(AppModule(app)).build()
invocation within the companion object
.
If a invoke the same line any were by the companion object
dagger generate de class without any problem.
An other thing I did look for a solution was create an other different class with the same structure, and importe the DaggerAppComponent
as internal object, and I the same result happened.
I don't what to have the initialization of the component outside. So, there any other alternative solution, or what am I doing wrong?.
UPDATE FOR KOTLIN 1.1.4
generateStubs
does not work anymore. Feel free to make a build with the latest Kotlin and it would tell you in the Messages section of Android Studio that it is not necessary anymore. Here's an up-to-date list of dependencies for Dagger2 for Android and KotlinIf u have problem withe
DaggerComponent
, You should addto
build.gradle
it will generatekotlin
code fordagger 2
otherwise project will only build onRebuild
This issue can be fixed with the bellow change which is different from original answer
Following will also work well to fix this issue
with plugins
and dependencies
For reference check out this Gist
I don't know when this change happened, but on 1.1.2 of the Kotlin gradle plugin you replace this (in your module's
build.gradle
):with this:
and then make sure to replace dependencies that use
annotationProcessor
withkapt
.For example, the old way would be to use:
and now you use:
You need to have the kapt processor in build.gradle:
This extension will generate the code for dagger.
Additionally, for newer gradle versions, you can also apply the plugin in your build.gradle:
You can check this project for reference