Как ввести список или набор в Dagger, как мы можем сделать это в Spring?

Все в вопросе. Например, для класса Foo, содержащего список String :

public class Foo {

 private List<String> fooList;

 //getter and setter

}

в Xml мы можем сделать следующее:

<bean id="foo" class="Foo">
  <property name="fooList">
     <list>
        <value>bar</value>
        <value>baz</value>           
    </list>
</property>


person Dimitri    schedule 01.09.2014    source источник
comment
Похоже, вам нужно создать для этого провайдера, см. ответ на аналогичный вопрос stackoverflow.com/a/18105271/2807168   -  person leveluptor    schedule 01.09.2014


Ответы (1)


Используя Dagger, вам нужно будет превратить ваш fooList в зависимость вашего класса Foo. Вы бы сделали это, аннотировав его с помощью @Inject. Это сообщит Dagger, что когда Foo будет создан Dagger, необходимо также внедрить List<String> fooList. Имейте в виду, что в моем примере fooList не является приватным. Поскольку Dagger не использует рефлексию и вместо этого использует генерацию кода, вы должны объявить вводимые поля как общедоступную или частную область.

public class Foo {

    @Inject
    @Named("FooDependency")
    List<String> footList;

    // getter and setter

}

Здесь, поскольку список является распространенным типом, мы аннотируем его @Named("FooDependency"), где «FooDependency» может быть любой строкой, которую вы пожелаете. Мы делаем это, потому что вполне возможно, что вы захотите ввести еще один List<String> в другое место в приложении, и мы захотим иметь возможность различать 2. Другой List<String> может быть аннотирован, например, @Named("ADifferentDependency").

Затем вам нужно будет аннотировать метод с помощью @Provide в одном из ваших модулей, который позаботится о предоставлении этой зависимости.

@Module(injects = Foo.class)
public class SomeModule {
    @Provide
    @Named("FooDependency")
    public List<String> provideFooDependencyListOfString() {
        return Arrays.asList("1", "2", "3");
    }
}

Тогда вы можете использовать его

ObjectGraph objectGraph = ObjectGraph.create(new SomeModule());
Foo foo = objectGraph.get(Foo.class);
person Miguel    schedule 02.09.2014