Как мне это сделать?
< em>(Кроме упаковки коллекций в отдельные типы — в моем примере ниже это будут AllPeople и AllExceptJane)
Вот неудачный MRE
Код: Выделить всё
package myown;
import dagger.Component;
import javax.inject.Named;
import javax.inject.Singleton;
import java.util.Set;
@Component(modules = PersonModule.class)
@Singleton
public interface PersonComponent {
@Named("jane")
Set getAllPeople();
@Named("exceptJane")
Set getAllPeopleExceptJane();
}
Код: Выделить всё
package myown;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
import javax.inject.Named;
import javax.inject.Singleton;
import java.util.HashSet;
import java.util.Set;
@Module
public class PersonModule {
@Singleton
@Named("jane")
@Provides
public Person jane() {
return new Person("Jane");
}
@Singleton
@Provides
@IntoSet
public Person joshua() {
return new Person("Joshua");
}
@Singleton
@Provides
@Named("exceptJane")
public Set allExceptJane(/*does Dagger have trouble with this part?*/ Set allExceptJane) {
return allExceptJane;
}
@Singleton
@Provides
@Named("all")
public Set all(@Named("exceptJane") Set allExceptJane,
@Named("jane") Person jane) {
Set all = new HashSet(allExceptJane);
all.add(jane);
return all;
}
}
Код: Выделить всё
package myown;
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
Код: Выделить всё
java: [Dagger/MissingBinding] @javax.inject.Named("jane") java.util.Set cannot be provided without an @Provides-annotated method.
@javax.inject.Named("jane") java.util.Set is provided at
myown.PersonComponent.getAllPeople()
Подробнее здесь: https://stackoverflow.com/questions/785 ... of-another
Мобильная версия