2017-02-16 5 views
0

クラスAのインスタンスの依存関係を満たすとき、私は追加の依存性 - ダガー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は完全に異なるパッケージにあり、私は満足したいクラスのモジュールおよびコンポーネントを有しますModuleBのclassAインスタンスの依存関係 ClassNeedingBでClassAのインスタンスを挿入するにはどうすればよいでしょうか。 したがって、ModuleBがModuleAに依存していることを確認するにはどうすればよいですか。

おかげ

答えて

1

あなたが望むものを達成するためにコンポーネント間の依存関係を作成することができます。

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

     void inject(ClassNeedingB classNeedingB); 
    } 

リンクを作成するために必要なのはComponentBビルダーにごComponentAインスタンスを供給することです:

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

それは何をしたのですが、うまくいかないようです。 @InjectはclassAのオブジェクトを挿入できません – Sunny

+0

注入するクラスのコードを追加してください。 –

+0

今すぐ追加... – Sunny

関連する問題