匕首递归注射

时间:2013-09-04 20:26:37

标签: dependency-injection dagger

我正在尝试匕首,我目前的用例由下面的代码表示。 我认为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所希望的行为,我没有任何想法,但是如果可以的话,你可以建议我采取可能的方式来执行此操作,以便在每个物体上进行注射。

编辑我稍微改变了用例。我忘了一点细节:(。

由于

1 个答案:

答案 0 :(得分:2)

每种类型都可以由@Provides创建或具有@Inject注释,但不能同时具有这两种类型。上述代码中的解决方案是删除除@Provides之外的所有内容的Bottom方法。

相关问题