Използвайки Dagger, ще трябва да превърнете вашия fooList
в зависимост от вашия Foo
клас. Бихте направили това, като го анотирате с @Inject
. Това ще каже на Dagger, че когато Foo
бъде създадено от Dagger, това също List<String> fooList
трябва да бъде инжектирано. Имайте предвид, че fooList
не е лично в моя пример. Тъй като Dagger не използва рефлексия и вместо това използва генериране на код, трябва да декларирате полета за инжектиране като публичен или частен обхват.
public class Foo {
@Inject
@Named("FooDependency")
List<String> footList;
// getter and setter
}
Тук, тъй като List е често срещан тип, ние го отбелязваме с @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