package Ġio . github . z ey om ir . cv . base . di Ċ Ċ import Ġio . github . z ey om ir . cv . Cv Application Ċ import Ġio . github . z ey om ir . cv . di . Cv Component Ċ import Ġkotlin . reflect . K Class Ċ Ċ object ĠScope Manager Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġapp Component : ĠApp Component ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcv Component : ĠC v Component ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġinit ( app : ĠC v Application ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( app Component Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Must Ġnot Ġinitialize ĠApp Component Ġtwice ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp Component Ġ= ĠApp Component . Initializer . init ( app ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget App Component (): ĠApp Component Ġ= Ġapp Component !! ĊĊĠĠĠ Ġfun Ġget Cv Component ( components : ĠMutable List < K Class < out ĠAny >> Ġ= Ġmutable ListOf ()): ĠC v Component Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( components . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponents . addAll ( listOf ( Cv Component :: class )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclear Scopes Except ( components ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cv Component Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv Component Ġ= ĠC v Component . Initializer . init ( getApp Component ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcv Component !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Scopes Except ( except : ĠList < K Class < out ĠAny >> Ġ= Ġempty List ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! except . contains ( Cv Component :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv Component Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ