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