EDITAndroid Dagger: Ich kann nicht eine externe Klasse ohne @Inject Konstruktor
das Problem gelöst liefern. Siehe meinen Beitrag unten.
Ich schreibe eine Android App mit Verwendung von Dolch und Kotlin.
möchte ich java.text.SimpleDateFormat
Klasse in meiner Klasse DateHelper
@Singleton
class DateHelper @Inject constructor(var dateFormat: SimpleDateFormat) {
...
}
Ich habe ein Modul injizieren, die @Provides
SimpleDateFormat
.
@Module
class DateModule {
@Singleton
@Provides
fun dateFormat(): SimpleDateFormat {
return SimpleDateFormat("yyyy-MM-dd", Locale.US)
}
}
und ein Dolch Komponente:
@Singleton
@Component(modules = arrayOf(MyAppModule::class, DateModule::class))
interface MyAppComponent {
...
}
meine Schließlich Application
:
open class MyApplication : Application() {
private lateinit var myAppComponent: MyAppComponent
override fun onCreate() {
super.onCreate()
myAppComponent = createGraph()
}
open fun createGraph(): MyAppComponent {
return DaggerMyAppComponent.builder().myAppModule(MyAppModule(this)).build()
}
fun getAppComponent(): MyAppComponent {
return myAppComponent
}
}
Jetzt versuche ich zu @Inject
DateHelper
in mein Fragment
:
class CoffeeNoteFragment : Fragment(), DatePickerDialog.OnDateSetListener {
@Inject lateinit var dateHelper: DateHelper
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity.application as MyApplication).getAppComponent().inject(this)
}
}
Leider Kompilierzeitfehler Ich erhalte
error: [com.example.mateusz.coffeenotes.application.MyAppComponent.inject(com.example.mateusz.coffeenotes.CoffeeNoteFragment)] java.text.SimpleDateFormat cannot be provided without an @Inject constructor or from an @Provides-annotated method.
java.text.SimpleDateFormat is injected at
com.example.mateusz.coffeenotes.database.DateHelper.<init>(arg0)
com.example.mateusz.coffeenotes.database.DateHelper is injected at
com.example.mateusz.coffeenotes.CoffeeNoteFragment.dateHelper
com.example.mateusz.coffeenotes.CoffeeNoteFragment is injected at
com.example.mateusz.coffeenotes.application.MyAppComponent.inject(arg0)
Ich verstehe nicht, warum ich diesen Fehler, da ich @Providing
die SimpleDateFormat
bin. Natürlich kann ich @Inject
Konstruktor nicht hinzufügen, da ich die SimpleDateFormat
Klasse nicht besitze.
Irgendwelche Hilfe, was ich vermisse?
Das sieht gut für mich aus, haben Sie vielleicht in einem '@ Qualifier', z. '@named()' oder etwas? –
Ich habe es geschafft, das Problem zu beheben. Siehe meinen Beitrag unten.Ich habe nicht genügend Informationen zur Verfügung gestellt, um das eigentliche Problem zu bemerken, aber ich erkannte nicht, dass der Fehler von einer anderen Komponente kam, weil die Fehlermeldung auf MyAppComponent zeigte. –