package Ġcom . example . android . d agger . di Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . example . android . d agger . login . Login Component Ċ import Ġcom . example . android . d agger . registration . Registration Component Ċ import Ġcom . example . android . d agger . user . User Manager Ċ import Ġdagger . Bind s Instance Ċ import Ġdagger . Component Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠDefinition Ġof Ġa ĠD agger Ġcomponent Ċ Ġ* Ċ Ġ* ĠA Ġ@ Component Ġinterface Ġgives Ġthe Ġinformation ĠD agger Ġneeds Ġto Ġgenerate Ġthe Ġapplication Ġgraph Ġat Ġcompile - time . Ċ Ġ* ĠThe Ġparameter Ġof Ġthe Ġinterface Ġmethods Ġdefine Ġwhat Ġclasses Ġrequest Ġinjection . Ċ Ġ* Ċ Ġ* ĠInclude Ġmodules Ġinside Ġ@ Component Ġannotation Ġas Ġ" modules " Ġparameter Ġto Ġlet Ġthe Ġgraph Ġknow Ġabout Ġthem Ċ Ġ* Ġ& Ġallow ĠApp Component Ġaccess Ġthe Ġinformation Ġinside Ġmodules . Ċ Ġ* Ċ Ġ* ĠIn Ġa Ġmore Ġcomplex Ġapplication , Ġwe Ġcould Ġalso Ġhave Ġa ĠNetwork Module Ġthat Ġadds Ġinformation Ġon Ċ Ġ* Ġhow Ġto Ġprovide Ġa ĠOk HttpClient , Ġor Ġhow Ġto Ġconfigure ĠGson Ġor ĠM oshi , Ġfor Ġexample . Ċ Ġ* Ċ Ġ* ĠUses Ġ@ Singleton Ġscope Ġannotation Ġon Ġthe Ġcomponent Ġand Ġrelated Ġclasses Ġto Ġhave Ġunique Ġinstances Ġof Ġthem Ċ Ġ*/ Ċ @ Singleton Ċ @ Component ( modules Ġ= Ġ[ Storage Module :: class , ĠApp Sub components :: class ]) Ċ interface ĠApp Component Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġto Ġcreate Ġinstances Ġof Ġthe ĠApp Component ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcontext , Ġnecessary Ġto Ġcreate ĠSharedPreferences Storage Ġinstance Ġ( used Ġin ĠStorage Module ) ĊĠĠĠĠ Ġ* Ġ( context Ġis Ġalready Ġavailable Ġwhen Ġthe ĠApp Component Ġinstance Ġis Ġcreated ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Component . Factory ĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWith Ġ@ Bind s Instance , Ġthe ĠContext Ġpassed Ġin Ġwill Ġbe Ġavailable Ġin Ġthe Ġgraph ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ Bind s Instance Ġtells ĠD agger Ġthat Ġit Ġneeds Ġto Ġadd Ġthat Ġinstance Ġin Ġthe Ġgraph Ġand Ġwhenever ĠContext ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġrequired , Ġprovide Ġthat Ġinstance . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ Bind s Instance Ġis Ġused Ġfor Ġobjects Ġthat Ġare Ġconstructed Ġoutside Ġof Ġthe Ġgraph Ġ( e . g . Ġinstances Ġof ĠContext ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate (@ Bind s Instance Ġcontext : ĠContext ): ĠApp Component ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTwo Ġways Ġto Ġinteract Ġwith Ġthe ĠD agger Ġgraph : ĊĠĠĠĠ Ġ* ĠĠĠ 1 . ĠDecl aring Ġa Ġfunction Ġthat Ġreturns Ġa Ġtype Ġallows Ġretrieving Ġtypes Ġfrom Ġthe Ġgraph ĊĠĠĠĠ Ġ* ĠĠĠ 2 . ĠDecl aring Ġa Ġfunction Ġthat Ġreturns ĠUnit Ġand Ġtakes Ġa Ġclass Ġas Ġa Ġparameter Ġallows ĊĠĠĠĠ Ġ* Ġ Ġfield Ġinjection Ġin Ġthat Ġclass ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ// Ġ( 1 ) ĠEx pose Ġcomponent Ġfactories Ġfrom Ġthe Ġgraph Ġ( to Ġbe Ġable Ġto Ġaccess Ġthem Ġin Ġthe Ġactivities ) ĊĠĠĠ Ġfun Ġregistration Component (): ĠRegistration Component . Factory ĊĠĠĠ Ġfun Ġlogin Component (): ĠLogin Component . Factory ĊĊĠĠĠ Ġ// Ġ( 2 ) ĠClasses Ġthat Ġcan Ġbe Ġinjected Ġby Ġthis ĠComponent ĊĠĠĠ Ġ// Ġ Ġ( The Ġfollowing Ġexamples Ġare Ġnot Ġactually Ġused Ġhere Ġanymore , Ġthey Ġwill Ġbe Ġinjected Ġby ĠUser Component Ġinstead ) Ċ // ĠĠĠ Ġfun Ġinject ( activity : ĠMainActivity ) Ċ // ĠĠĠ Ġfun Ġinject ( activity : ĠSettings Activity ) ĊĊĊĠĠĠ Ġ// ĠEx pose ĠUser Manager Ġso Ġthat ĠMainActivity Ġand ĠSettings Activity Ġcan Ġaccess Ġa Ġparticular Ġinstance Ġof ĠUser Component ĊĠĠĠ Ġfun Ġuser Manager (): ĠUser Manager Ċ }