我正在尝试匕首,我目前的用例由下面的代码表示。 我认为Dagger会以递归方式注入对象,而这似乎不会发生。
我在top.inner
上收到空。
public static class Bottom {
}
/*
public static class Inner {
@Inject Bottom bottom;
}
*/
public static interface Inner {
public Bottom bottom();
public static class Implementation() {
@Inject Bottom bottom;
@Override public Bottom bottom() {
return bottom;
}
}
}
public static class Top {
@Inject Provider<Inner> inner;
}
@Module(injects = {DaggerTest.class, /* Top.class, Inner.class, */ Bottom.class})
public class AppModule {
@Provides public Bottom providesBottom() {
return new Bottom();
}
}
@Inject Top top;
@Test
public void testProviderInjection() {
ObjectGraph graph = ObjectGraph.create(new AppModule());
graph.inject(this);
Assert.assertNotNull("top", top);
Assert.assertNotNull("top.inner", top.inner);
Assert.assertNotNull("top.inner.get()", top.inner.get());
/* Assert.assertNotNull("top.inner.get().bottom", top.inner.get().bottom); */
Assert.assertNotNull("top.inner.get().bottom", top.inner.get().bottom());
}
如果这是Dagger所希望的行为,我没有任何想法,但是如果可以的话,你可以建议我采取可能的方式来执行此操作,以便在每个物体上进行注射。
编辑我稍微改变了用例。我忘了一点细节:(。
由于
答案 0 :(得分:2)
每种类型都可以由@Provides
创建或具有@Inject
注释,但不能同时具有这两种类型。上述代码中的解决方案是删除除@Provides
之外的所有内容的Bottom
方法。