package Ġcom . am ino graphy . core . di Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġcom . am ino graphy . scope . Component Holder Ċ import Ġcom . am ino graphy . scope . annotation . App Scope Ċ import Ġdagger . Bind s Instance Ċ import Ġdagger . Component Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* ĠA Ġdagger Ġcomponent Ġclass Ġproviding Ġdependencies Ġrelated Ġto Ġthe Ġ[ App Scope ]. ĠIt Ġis Ġalso Ġresponsible Ċ Ġ* Ġfor Ġbuilding Ġrelations Ġto Ġsub - components . Ċ Ġ* Ċ Ġ* Ġ@ author Ġa mino graphy Ċ Ġ*/ Ċ @ App Scope Ċ @ Component ( ĊĠĠĠ Ġmodules Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠApp Module :: class ĊĠĠĠ Ġ] Ċ ) Ċ interface ĠApp Component Ġ{ ĊĊĠĠĠ Ġfun Ġexposes Context (): ĠContext ĊĊĠĠĠ Ġfun Ġexposes Application (): ĠApplication ĊĊĠĠĠ Ġ@ Component . Builder ĊĠĠĠ Ġinterface ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bind s Instance ĊĠĠĠĠĠĠĠ Ġfun Ġcontext ( context : ĠContext ): ĠBuilder ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠApp Component ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠComponent Holder < App Component >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠWeak Reference < Context > ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfrom ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . context Ġ= ĠWeak Reference ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Component () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Component (): ĠApp Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD agger App Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. context ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠRuntimeException (" App Component Ġis Ġnot Ġinitialized Ġin Ġthe Ġapplication !") ĊĠĠĠ Ġ} Ċ }