Kotlin Error: Dagger does not support injection into private fields

You have mistake here:

    @Inject
internal var mSharedPreferences: SharedPreferences? = null

This looks like you added @Inject annotation to the KotlinFragment class

Please change it to this and it will work:

var mSharedPreferences: SharedPreferences? = null
        @Inject set

Here is the link to the documentation: https://kotlinlang.org/docs/reference/annotations.html


Accidentally I came across to my own answer and have to confess, that in fact it isn't working (at least for my use-case). Please consider Avilio's answer which worked for me also: substitute internal with lateinit.


Old answer

Remove internal modifier. Dagger needs at least package-private access in order to access annotated field. In Kotlin internal modifier is not a substitution for Java's package-private access modifier.

For detailed explanation of differences between modifiers in Java and Kotlin refer to Fragmented podcast's episode #101 - "Learning Kotlin – visibility modifiers, internal modifier, modules", as well as the official docs.


As simple you can do this, change this line

@Inject
internal var mSharedPreferences: SharedPreferences? = null

To

@set:Inject
internal var mSharedPreferences: SharedPreferences? = null

this work like charm in my case.