GithubClient icon indicating copy to clipboard operation
GithubClient copied to clipboard

Make UserComponent be Sub Component of another one?

Open IHNEL opened this issue 7 years ago • 4 comments

Thank you for your sharing this tutorial, it s very helpful

I am using your idea about User Scope to share signed user instance across it's sub components. And I want to make UserComponent itself be sub component of another one, like Base Activity Component. My graph is App component > base activity component > User Component > User Details Component (and many others)

The arrow stands for sub-component relationship. In your example, you used SubComponent Builder to create User component, how can i make it extends all resource provide by App component and Base Activity component?

IHNEL avatar Apr 22 '17 00:04 IHNEL

Did you figure this out? I'm interested in ways to create App component > Activity Component > Fragment Component relationship!

smithc42 avatar May 22 '17 14:05 smithc42

@smithc42 Yes, I investigate again and again his post here: http://frogermcs.github.io/building-userscope-with-dagger2/, and then I apply similar way to my application. using @Subcomponent.Builder I can make a component be subcomponent of any other one.

For the relationship App component > Activity Component > Fragment Component , it's easy to achieve by define the <Component> plus( <module>) function in the parent component interface, once you have the parent component instance, just call this method and supply the sub-module instance, you will got new sub-component and it inherits all properties of its parents.

For more details, read this post: http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/

if you are unable to build this in practices, share me the sample git and I can help.

IHNEL avatar May 26 '17 02:05 IHNEL

@IHNEL Thanks for the reply. I managed to set it up correctly but Dagger kept throwing:

...dependency cannot be provided without an @provides-annotated method...a binding with matching key exists in MainComponent

I finally figured out I forgot to remove void inject(MainFragment fragment) from the root component (legacy code). Once I removed the injection from the root component it worked as expected.

Cheers!

smithc42 avatar May 26 '17 15:05 smithc42

the message from Dagger is very clear. you inject a class into somewhere but didn't define @Provide method or inject constructure

IHNEL avatar May 27 '17 11:05 IHNEL