Ich bin mit Guice in Java + Kotlin Projekt Karte Algorithmus Implementierung in eine bestimmte Bean zu injizieren, aber ich halteGuice MapBinder
1) No implementation for java.util.Map<java.lang.String, ? extends com.scherule.scheduling.algorithms.SchedulingAlgorithm> annotated with @com.google.inject.name.Named(value=scheduling.algorithms) was bound.
while locating java.util.Map<java.lang.String, ? extends com.scherule.scheduling.algorithms.SchedulingAlgorithm> annotated with @com.google.inject.name.Named(value=scheduling.algorithms)
for the 2nd parameter of com.scherule.scheduling.SchedulingJobConsumer.<init>(SchedulingJobConsumer.kt:17)
while locating com.scherule.scheduling.SchedulingJobConsumer
Die Definition des Moduls erhalten wird wie folgt definiert:
class AlgorithmsModule : AbstractModule() {
override fun configure() {
MapBinder.newMapBinder(binder(),
String::class.java,
SchedulingAlgorithm::class.java,
Names.named("scheduling.algorithms")
).addBinding("interval-projection").toInstance(IntervalProjectionAlgorithm())
}
}
Und die Anrufer-Nummer lautet:
@Singleton
class SchedulingJobConsumer
@Inject constructor(
@Named("scheduling.channel") channel: Channel,
@Named("scheduling.algorithms") val schedulers: Map<String, SchedulingAlgorithm>
) : DefaultConsumer(channel) ...
Aber wenn ich
injector.getInstance(Key.get(new TypeLiteral<Map<String, SchedulingAlgorithm>>() {}, named("scheduling.algorithms")))
ist es da. Was ist los mit dir?
Versuchen Sie, die Deklaration '@ JvmSuppressWildcards' der Deklaration von' val schedulers' hinzuzufügen – yole
Das Hinzufügen zur Konstruktordeklaration ändert nichts. Wenn Sie dies auf einem Feld tun, ändert sich die Fehlermeldung in No -Implementierung für java.util.Map (...). Es scheint also, dass es diese nicht einmal finden kann. –
kboom
Die Fehlermeldung scheint zu sagen, dass es eine Implementierung für SchedulingAlgorithm nicht finden konnte. Wie ist das definiert? – Les