Используя 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