Кинжал рекурсивный впрыск

Я пытаюсь использовать кинжал, и мой текущий вариант использования представлен кодом ниже. Я думал, что Кинжал будет вводить объекты рекурсивно, но этого не происходит.

Я обнуляю 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());
}

Я понятия не имею, является ли это желаемым поведением Кинжала, но если это так, вы можете предложить мне возможный способ сделать это, прибегая к инъекциям на каждом объекте.

РЕДАКТИРОВАТЬ Я немного изменил вариант использования. Я забыл маленькую деталь:(.

Спасибо

1 ответ

Решение

Каждый тип может быть создан @Provides или есть @Inject аннотации, но это не может иметь оба. Ваше решение в приведенном выше коде состоит в том, чтобы удалить @Provides методы для всего, кроме Bottom,

Другие вопросы по тегам