2017-02-16 4 views
0

У меня есть модуль и компонент для класса, когда удовлетворяют зависимости, например, из класса А.Добавление зависимостей в модулях - Dagger 2

  @Module 
      public class ModuleA { 

       private ClassA classA; 

       public ModuleA(ClassA classA) { 
        this.classA = classA; 
       } 

       @Provides 
       ClassA providesClassA(){ 
        return this.classA; 
       } 
      } 


      @Component(modules = {ModuleA}) 
      public interface ComponentA { 

       void inject(ClassNeedingA classNeedingA); 

      } 

      @Module 
      public class ModuleB { 

       private ClassB classB; 

       public ModuleB(ClassB classB) { 
        this.classB = classB; 
       } 

       @Provides 
       ClassB providesClassB(){ 
        return this.classB; 
       } 

      @Provides 
       ClassA providesClassA(ClassA classA){ 
        return classA; 
       } 

      } 

     @Component(modules = {ModuleB}) 
      public interface ComponentB { 

       void inject(ClassNeedingB classNeedingB); 

      } 

    public class classNeedingB{ 

    @Inject 
    ClassB classB 

    @Inject 
    ClassA classA 
    public classNeedingB{ 
DaggerComponentB.builder().moduleB(new ModuleB(new ClassB()).componentA(DaggerComponentA.builder().moduleA(new ModuleA(new ClassA())).build()).build().inject(); 
    } 

    } 

ModuleB находится в совершенно другом пакете, и я хотел бы, чтобы удовлетворить зависимость экземпляра класса A от модуляB. Как получить кинжал, чтобы ввести экземпляр класса ClassA в ClassNeedingB. Итак, как я могу убедиться, что ModuleB зависит от ModuleA.

Благодаря

ответ

1

Вы можете создать зависимости между компонентами, чтобы достичь того, чего вы хотите:

@Component(modules = {ModuleB}, dependencies = ComponentA.class) 
    public interface ComponentB { 

     void inject(ClassNeedingB classNeedingB); 
    } 

Чтобы создать ссылку все, что вам нужно, это ввести свой экземпляр Componenta к ComponentB строитель:

ComponentB componentB = DaggerComponentDependency_ComponentB.builder() 
       .moduleB(moduleB) 
       .componentA(componentA) 
       .build(); 
+0

Thats, что я сделал, но он, похоже, не работает. @Inject не может ввести объект классаA – Sunny

+0

Можете ли вы добавить код для класса, в который вы впрыскиваете? –

+0

ok добавляет сейчас ... – Sunny