При использовании кинжала, какие подходы позволят создать свободную/легкую инстанцировку полей @Inject на объектах, которые также создаются путем инжекции.Вложенные/рекурсивные инъекции с кинжалом
Например, приведенный ниже код вводит объект типа Bar в заданный объект Foo. Он будет делать это одним из двух способов отображения. Однако поле Sly каждого объекта Bar не соответствует этому поведению.
Foo
public class Foo {
@Inject Bar bar;
public String getValue() {
return "Foo's bar value: " + bar.getValue();
}
}
Банг
public class Bar {
@Inject Sly sly;
public String getValue() {
return "Bar's sly value: " + sly.getValue();
}
}
Sly
public class Sly {
public String getValue() {
return "Hey!";
}
}
Модуль
@Module(
injects = {
Foo.class,
Bar.class
}
)
public class ExampleTestModule {
@Provides
Bar provideBar() {
return new Bar();
}
@Provides
Sly provideSly() {
return new Sly();
}
}
Тесты
public void testWorksWithInject() {
Foo foo = new Foo();
ObjectGraph.create(new ExampleTestModule()).inject(foo);
assertEquals("...", foo.getValue()); // NullPointerException
}
public void testWorksWithGet() {
Foo foo = ObjectGraph.create(new ExampleTestModule()).get(Foo.class);
assertEquals("...", foo.getValue()); // NullPointerException
}
В любом случае, Sly Bar является не инстанцирован/@ Введенный. Конечно, Кинжал допускает инъекцию конструктора, которая решает проблему. Я хотел бы знать, есть ли альтернативы переустановке этих классов в список параметров конструкторов. Что хорошо работает для вас?