I have the following snippet in my dagger 2 module
@Singleton @Provides @ElementsIntoSet fun providesQueries(foo: Foo): Set<Foo>{ val queries = LinkedHashSet<Foo>() queries.add(foo) return queries }
I try to inject into in this way
@Inject lateinit var foo: Set<Foo>
But dagger shows an error which says that Dagger cannot provides java.util.Set without @Provides or @Produces method.
I did the same in java and it worked. Does somebody know why is it failing?
Dagger is a fully static, compile-time dependency injection framework for Java, Kotlin, and Android.
What is Dagger2? Dagger2 is a static compile-time dependency injection Framework for Java,Kotlin and Android. It should actually be Dagger, Dagger2 simply implies the second version which was a complete re-write of the DI framework. The earlier version was created by Square. Dagger2 is now maintained by Google.
Intro to IntoSet. In a nutshell, Set multibinding allows you to inject a collection of a specific type into other classes, and also provides a way for you to inject a specific class into that collection.
As it described in the Kotlin reference
To make Kotlin APIs work in Java we generate
Box<Super>
asBox<? extends Super>
for covariantly definedBox
(orFoo<? super Bar>
for contravariantly defined Foo) when it appears as a parameter.
You can use @JvmSuppressWildcards
for avoiding it, just as following:
@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With