2015-08-12 3 views
0

Приносим извинения за то, что вы можете предоставить только псевдокод. Я использую Dagger 2 в одном из моего андроида проекта и у меня возникли некоторые проблемы, когда прикован зависимости, например, «А как B и B имеет C», как в следующем:Вставка кинжала 2 по цепным зависимостям

class A { 
    @Inject B b; 

    void bootstrap() { 
    componentA.inject(this); 
    } 
} 

class B { 
    @Inject C c; 
} 

Модуль и компонент я должен выглядеть следующим образом:

moduleA { 
    provides B; 
    provides C; 
} 

componentA { 
    void inject(A); 
} 

Однако при запуске приложения, C не впрыскивается, таким образом, дал мне исключения нулевого указателя при ссылке.

Мой вопрос: Почему C не вводится?

Я попытался иметь загрузочный метод в B и явно инъекционного Componenta к В, как следующее:

class B { 
    @Inject C c; 

    void bootstrap() { 
    componentA.inject(this); 
    } 
} 

Он работал, но он не чувствует себя хорошо для меня, как я ожидал кинжал 2 на рисунке вне зависимостей для меня, а не передавая компонент А вдоль цепи. Любая помощь будет оценена!

ответ

0

Если вы не хотите передавать компонент A по цепочке, вам нужно будет использовать параметры конструктора вместо @Inject в ваших предоставленных классах.

@Module 
public class ModuleA { 
    @Singleton 
    @Provides 
    public A a(B b) { 
     return new A(b); 
    } 

    @Singleton 
    @Provides 
    public B b(C c) { 
     return new B(c); 
    } 

    @Singleton 
    @Provides 
    public C c() { 
     return new C(); 
    } 
} 
Смежные вопросы