Sunny
Sunny

Reputation: 7604

Adding dependencies in Modules - Dagger 2

I have a Module and Component for a class when satisfy the dependency for instance of Class A.

            @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 is in a completely different package and I would like to satisfy the dependency of the instance of classA in ModuleB. How would I get dagger to inject instance of ClassA in ClassNeedingB. So how do i make sure that ModuleB is dependant on ModuleA.

Thanks

Upvotes: 0

Views: 948

Answers (1)

Hanan Rofe Haim
Hanan Rofe Haim

Reputation: 918

You can create dependencies between components to achieve what you want:

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

        void inject(ClassNeedingB classNeedingB);
    }

To create the link all you need is to supply your ComponentA instance to ComponentB builder:

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

Upvotes: 1

Related Questions