使用Dagger時,使用什麼方法可以在通過注入實例化的對象上實現@Inject字段的自由/簡單實例化。用匕首嵌套/遞歸注入
例如,下面的代碼會將一個Bar類型的對象注入到給定的Foo對象中。它將以顯示的兩種方式中的任何一種來執行此操作。但是,每個Bar對象的Sly字段都不匹配該行爲。
富
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();
}
}
狡猾
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
}
在這兩種情況下,酒吧的狡猾不被注入/ @實例化。當然,Dagger允許構造函數注入,從而解決了這個問題。我想知道是否有替代方法將這些類集合到構造函數的參數列表中。什麼對你有好處?